剑指offer第二十三题
题目如下
什么是后序遍历序列?
后序遍历序列就是先访问所有的左节点再访问所有的右节点,再访问根节点了
根节点最香,所以是先苦后甜0.0
思路与代码
这个题目隐含了一个条件就是 左节点<根节点, 右节点>根节点
这样就可以bfs了,直接广搜,然后最后一个一定是大根节点。
然后通过比较值就可以找到左节点和右节点的区间了
class Solution {
public:
bool VerifySquenceOfBST(vector<int> sequence) {
return bfs(sequence,0,sequence.size()-1);
}
bool bfs(vector<int> sequence,int begin,int end){
if(sequence.size()==0||begin>end){
return false;
}
int root=sequence[end];
int i=begin;
for(;i<end;i++){
if(sequence[i]>root){
break;
}
}
for(int j=i;j<end;j++){
if(sequence[j]<root){
return false;
}
}
bool left=true;
if(begin<i-1){
left=bfs(sequence,begin,i-1);
}
bool right=true;
if(end>i+1){
right=bfs(sequence,i,end-1);
}
return left&&right;
}
};