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

题目:

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

解答:

BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子树)都是合法的后序序列。

 1 class Solution 
 2 {
 3 public:
 4     bool judge(vector<int>& a, int left, int right)
 5     {
 6         if(left >= right) 
 7         {
 8             return true;
 9         }
10         
11         // 从后面开始找
12         int i = right;
13         while(i > left && a[i - 1] > a[right]) 
14         {
15             --i;     // 找到比根小的坐标
16         }
17         
18         // 从前面开始找 star到i-1应该比根小
19         for(int j = left; j < i - 1; ++j) 
20         {
21             if(a[j] > a[right]) 
22             {
23                 return false;
24             }
25         }
26         return judge(a, left, i - 1) && (judge(a, i,right - 1));
27     }
28 
29     bool VerifySquenceOfBST(vector<int> a) 
30     {
31         if(a.size() <= 0) 
32         {
33             return false;
34         }
35         return judge(a, 0, a.size() - 1);
36     }
37 };

 

posted @ 2020-05-06 20:00  梦醒潇湘  阅读(208)  评论(0)    收藏  举报