时间限制:1秒
空间限制:32768K
热度指数:164257
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
AC代码:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(!sequence.size())
return false;
return judge(sequence,0,sequence.size()-1);
}
bool judge(vector<int> &a,int l,int r)//l为左边界 r 为右边界
{
if(l>=r) return true;
/*比如1 4 3 5这个二叉搜索树的后序遍历,没有右子树,
所以r一直对应的是4这个索引,当return judge(a, l, i - 1) && (judge(a, i, r - 1))中的第二个递归
i=r,r-1<r,所以应该是返回true
l==r对应的是叶子结点,l>r对应的是空树,这两种情况都是true
*/
int i=r;
while(i>l&&a[i-1]>a[r])//i 一直移动 移动到左子树边界 判定条件即右子树所有节点都需要大于根节点
--i;
for(int j=i-1;j>=l;--j)//j为i-1即相对于根节点的左子树,遍历左子树 如果左子树中有任何一个节点大于根节点 return false
{
if(a[j]>a[r])
{
return false;
}
}
return judge(a,l,i-1)&&judge(a,i,r-1);
}
};
提交网址: