题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
后续遍历数组的尾部为根节点,前面的部分,必然一部分为左子树,一部分为又子树,二叉搜索树,根节点左子树小于根节点的值,右子树大于。
所以我们只用遍历前面的部分,找到第一个大与根节点的,然后看后面是不是都是大于根节点的,如果是,size-1.
AC代码:
1 class Solution { 2 public: 3 bool VerifySquenceOfBST(vector<int> sequence) { 4 int sqsize=sequence.size(); 5 int i=0; 6 7 if(sqsize==0) 8 return false; 9 10 while(i<sqsize) 11 { 12 while(sequence[i]<sequence[sqsize-1]) 13 i++; 14 while(sequence[i]>sequence[sqsize-1]) 15 i++; 16 17 if(i!=sqsize-1) 18 return false; 19 i=0; 20 sqsize--; 21 } 22 return true; 23 } 24 };