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

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

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

/*
	简洁思路:
    后序遍历,每个区间都是最后一个为根节点
    比根节点小的都为左子树
    若右子树存在比根节点小的都不是空二叉搜索树
*/
class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        if (sequence.empty()) return false; // 空不为二叉搜索树
        int start = 0, end = sequence.size()-1; // 迭代判断的开始与结束序号
        return check(sequence, start, end);
    }

    bool check(vector<int> seq, int start, int end)
    {
        if (start >= end) return true;      // 若遍历到交叉点,那么都是满足条件

        // 寻找右子树
        int i = start;
        for(;i < end; ++i)
        {
            if(seq[i] > seq[end])   // 同时判断左子树都是小于根节点
            {
                break;
            }
        }
        int st = i-1;

        // 判断右子树都是大于根节点
        for(; i < end; ++i)
        {
            if(seq[i]< seq[end])
            {
                return false;
            }
        }

        // 判断迭代左子树
        bool left = check(seq, start, st);

        // 判断迭代右子树
        bool right = check(seq, st+1, end-1);

        // 综合判断
        return left&&right;
    }
};

挤挤刷刷! 文章被收录于专栏

记录coding过程

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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