都忘了什么是二叉搜索树:
概念:二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同
非递归:
看了别人代码之后了解的
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int size=sequence.size();
if(size==0)
return false;
int i=0;
while(--size){
while(sequence[i++]<sequence[size]);
while(sequence[i++]>sequence[size]);
if(i<size)
return false;
i=0;
}
return true;
}
};
递归:
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
if(sequence.size()==0)
return false;
return isBST(sequence,0,sequence.size()-1);
}
bool isBST(vector<int> sequence,int a,int b){
if(a==b)
return true;
int s=a;
while(sequence[s++]<sequence[b]&&s<b);
int mid=s-1;
while(sequence[s++]>sequence[b]&&s<b);
if(s<b)
return false;
if(a==mid || mid==b)
return isBST(sequence,a,b-1);
return isBST(sequence,a,mid-1)&&isBST(sequence,mid,b-1);
}
};