题解 | #二叉搜索树的后序遍历序列#

二叉搜索树的后序遍历序列

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

#include <stack>
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if(sequence.size() == 0) return false;
        return order(sequence, 0, sequence.size() - 1);
    }
    bool order(vector<int>& sequence, int l, int r) {
        // 剩一个节点的时候 返回 true
        if(l >= r) return true;
        int j;
        int mid = sequence[r];
         
        // 找到左子树和右子树的分界点,j代表左子树的最后一个索引位置
        for(j = l; j <r; j++) {
            int cur = sequence[j];
            if(cur > mid) break;
        }
         
        // 判断所谓的左子树中是否又不合法(不符合二叉搜索树)的元素
        for(int i = j; i < r; i++) {
            int cur = sequence[i];
            if(cur < mid) return false;
        }
        return order(sequence, l, j-1) && order(sequence, j, r-1);
    }
};

使用递归的思路,首先判断当前根节点下是否满足二叉搜索树(左子树的值都小于根节点,右子树的值都大于根节点),然后找到左右子树分界点,递归对左右子树进行判断是否满足二叉搜索树

注意:后续遍历末尾的值就是整棵树的根节点

全部评论

相关推荐

10-13 17:47
门头沟学院 Java
wulala.god:图一那个善我面过,老板网上找的题库面的
点赞 评论 收藏
分享
头像
09-21 09:55
门头沟学院 Java
想玩飞盘的我刷牛客:不给自己发个offer?
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务