[Sword Finger Offer]确定序列是否是用C ++实现的二进制搜索树的后遍历

电脑杂谈  发布时间:2020-06-10 23:11:02  来源:网络整理

判断二叉排序树_完全二叉树的判断_排序二叉树的建立

Nukke.com的问题地址

博客文章索引地址

完全二叉树的判断_判断二叉排序树_排序二叉树的建立

博客文章中代码的github地址

输入一个整数数组判断二叉排序树,以确定该数组是否是遍历二叉搜索树的结果. 如果是判断二叉排序树,则输出“是”,否则输出“否”. 假设输入数组中的任何两个数字互不相同.

判断二叉排序树_排序二叉树的建立_完全二叉树的判断

示例: 序列{5,7,6,9,11,10,8}是下图中的二叉搜索树的后遍历结果.

判断二叉排序树_完全二叉树的判断_排序二叉树的建立

自然:

示例:

完全二叉树的判断_判断二叉排序树_排序二叉树的建立

class Solution {
public:
    bool VerifySquenceOfBST(vector<int> sequence) {
        return bst(sequence, 0, sequence.size() - 1);
    }
private:
    bool bst(vector<int> seq, int begin, int end){
        // 边界条件
        if(seq.empty() || begin > end)
            return false;
        // 划分左右子树,并判断左右子树和根节点的关系
        int i = begin;
        for(; i < end; ++i)
            if(seq[i] > seq[end])
                break;
        int j = i;
        for(; j < end; ++j)
            if(seq[j] < seq[end])
                return false;
        // 判断左子树是不是二叉搜索树
        bool left = true;
        if(i > begin)
            left = bst(seq, begin, i - 1);
        // 判断右子树是不是二叉搜索树
        bool right = true;
        if(i < end - 1)
            right = bst(seq, i , end - 1);
        return left && right;
    }
};

后遍历与BST二进制树不对应


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-241124-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...