判断二叉搜索树的后序遍历序列

  • 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
  • 算法思想
    最后一个节点为根结点,可将数组分成两部分,左边部分为左树,右边部分为右树,进行递归循环,如果右树含有比根结点小的数据就不是后序遍历,否则为正确的后序遍历。
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size()==0)
            return false;
        return isBST(sequence,0,sequence.size()-1);
    }
    bool isBST(vector<int> vec,int start,int tail)
    {
        if(start>=tail)
            return true;
        int i = start ;
        while(i<tail&&vec[i]<vec[tail])  //左树  也可以从右树开始,则下面for循环则判断左树是否有比根结点大的
            i++;
        for(int j=i;j<tail;j++)  //寻找不符合规则的节点
            if(vec[j]<vec[tail])
                return false;
        return isBST(vec,start,i-1)&&isBST(vec,i,tail-1);
        
    }
};
    原文作者:算法
    原文地址: https://www.twblogs.net/a/5bd3aa562b717778ac20aaa0
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞