b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

剑指提议(二十三): 二叉搜索树的后遍历序列

电脑杂谈  发布时间:2020-05-15 22:02:51  来源:网络整理

二叉树的层序序列_序列二叉排序树_排序二叉树的遍历

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

示例:

排序二叉树的遍历_序列二叉排序树_二叉树的层序序列

二叉树的层序序列_排序二叉树的遍历_序列二叉排序树

以{5,7,6,9,11,10,8}为例,按随后顺序遍历的结果的最后一个数字8是根节点的值. 在此数组中,前三个数字5、7和6都小于8,这是值为8的节点的左子树节点. 最后三个数字9、11和10都大于8. 这就是价值. 8个节点的右子树节点.

我们接下来使用相同的方法来确定与数组每个部分相对应的子树的结构. 这实际上是一个递归过程. 对于序列5、7和6,最后一个数字6是左子树的根节点的值. 数字5小于6,它是值为6的节点的左子节点,而7是其右子节点. 同样序列二叉排序树,在序列9、11和10中,最后一个数字10是右子树的根节点. 数字9小于10,它是值为10的节点的左侧子节点,而11为右侧. 子节点.

排序二叉树的遍历_二叉树的层序序列_序列二叉排序树

我们使用递归方法首先确定数组左右子树的位置,然后确定左右子树是否为二叉搜索树.

2. 代码实践

二叉树的层序序列_序列二叉排序树_排序二叉树的遍历

C ++:

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 root = seq[end];
        
        //在二叉搜索树中左子树的结点小于根结点
        int i = begin;
        for(; i < end; ++i){
            if(seq[i] > root){
                break;
            }
        }
        
        //在二叉搜索书中右子树的结点大于根结点
        for(int j = i; j < end; ++j){
            if(seq[j] < root){
                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;
    }
};

Python:


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

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

      每日福利
      热点图片
      拼命载入中...