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

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

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);
    }
};

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

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

全部评论

相关推荐

秋招投简历提醒助手:个人经验是,一般面二十场左右就会进入侃侃而谈阶段。我今年七月末的时候开始的第一次面试,都是很多不会,回复很慢。后面慢慢迭代,到九月中的时候基本上面啥说啥,很放松的状态
远程面试的尴尬瞬间
点赞 评论 收藏
分享
11-03 13:18
门头沟学院 Java
包行:平时怎么刷算法题的哇,字节的手撕听说都很难
字节跳动工作体验
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务