题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
总结:后序遍历特征:最后一个为根节点,从第一个数字开始直到第一个比根节点大的数字都是左子树,后面都是右子树都应该比根节点大一旦有小的就判断不是,程序里用到了不设置初始值的循环。一般搜索树都是用递归。
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
int len =sequence.size();
if(len==0) return false;
vector <int>left,right;
int i=0;
for(;i<len-1;i++){
if(sequence[i]<sequence[len-1])
left.push_back(sequence[i]);
else
break;
}
for(;i<len-1;i++){
if(sequence[i]>sequence[len-1])
right.push_back(sequence[i]);
else
return false;
}
bool left1=true,right1=true;
if(!left.empty())
left1=VerifySquenceOfBST(left);//递归判断左子树
if(!right.empty())
right1=VerifySquenceOfBST(right);//递归判断右子树
return left1&&right1;
}
};