【树】二叉搜索树的后序遍历序列
题目:
输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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 };