23、二叉搜索树的后序遍历序列

来源:互联网 发布:metasploit和数据库 编辑:程序博客网 时间:2024/06/13 08:54

题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

时间限制:1秒 空间限制:32768K

小知识:
二叉树和二叉搜索树:
二叉树就是普通具有左右子树结构的树,二叉搜索树又叫二叉查找树(binary search tree),是满足左子树上所有结点的值均小于它的根结点的值,右子树上所有结点的值均大于它的根结点的值 这一条件的树。

思路:递归的思想。
首先给定的序列如果满足二叉搜索树的后续遍历,说明该序列的最后一个节点是根,也就是说,序列应该可以被分为两部分,前半部分(左子树)小于根,右半部分(右子树)大于根,如下图所示。并且,这两段子序列都应该是合法的后序序列(递归)。
这里写图片描述
通过检验是否满足上一条件来判断是否符合。

代码:

class Solution {public:    bool judge(vector<int> &num,int l,int r){        //只要没有不符合上述条件,就是合法的后序序列        if(l >= r)            return true;        int medium = r;        //从后往前找到medium的位置        while(medium > l && num[medium-1] > num[r])            medium--;        for(int j = medium - 1;j >= l;j--){            if(num[j] > num[r])                return false;        }        return judge(num,l,medium-1) && judge(num,medium,r-1);    }    bool VerifySquenceOfBST(vector<int> sequence) {        if(sequence.size()<=0)            return false;        return judge(sequence,0,sequence.size()-1);    }};