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

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

  分析:在后序遍历中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两个部分,第一个部分是左子树节点的值,他们都比根节点的值小;第二个部分是右子树节点的值,他们都比根节点的值大。因此从头遍历整个数组,当遇到一个大于根节点的数时,将前面的都划为左子树,继续遍历,如果后面有一个小于根节点的值,则不是后序遍历数组;如果后面的所有数都小于根节点的值,则继续递归遍历下去,代码如下(是根据在牛客网上给的函数原型写的):

 1 bool VerifySquenceOfBST(vector<int> sequence) {
 2     if(sequence.size()<=0)
 3         return false;
 4     return Judge(sequence,0,sequence.size()-1);
 5 }
 6 
 7 bool Judge(vector<int> sequence,int l,int r){
 8     int i=l,j;
 9     for(;i<r;i++){
10         if(sequence[i]>sequence[r])
11             break;
12     }
13     for(j=i;j<r;j++){
14         if(sequence[j]<sequence[r])
15             return false;
16     }
17     bool leftJudge = true;
18     bool rightJudge = true;
19     if(i>0)
20         leftJudge = Judge(sequence,0,i-2);
21     if(i<r)
22         rightJudge = Judge(sequence,i-1,r-1);
23     return leftJudge&&rightJudge;
24 }
原文地址:https://www.cnblogs.com/yangrenzhi/p/5787886.html