题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
时间限制:1秒 空间限制:32768K 热度指数:309225
思路
递归
- 根节点是最后一个元素
- 获得根节点的值后,找出左右子树的分界点(左子树都小于根节点值)
- 遍历右子树的值,判断是否都大于根节点的值,不都大于则返回false
- 对左右子树递归调用原函数,直至只剩一个元素,或者为空,此时返回true
class Solution {
public:
bool VerifySquenceOfBST(vector<int> s)
{
if(s.empty())
return false;
return DivideBST(s,0,s.size()-1);
}
bool DivideBST(vector<int> s,int begin,int end)
{
if(end-begin==0||end<begin)//递归终止条件,只剩一个元素,或end<begin
return true;
int root =s[end];
int mid=begin;
while(s[mid]<root)
++mid;
for(int i=mid+1;i<end;++i)//到达右子树,右子树都应大于root
if(s[i]<root)
return false;
bool left,right;
//递归调用左右子树
left=DivideBST(s,begin,mid-1);
right=DivideBST(s,mid,end-1);
return left&&right;
}
};