[剑指offer]JT23---二叉搜索树的后序遍历序列(先苦后甜)

题目如下

在这里插入图片描述

什么是后序遍历序列?

后序遍历序列就是先访问所有的左节点再访问所有的右节点,再访问根节点了
根节点最香,所以是先苦后甜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;
    }
};

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42136832/article/details/114624612