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

树9: 二进制搜索树的后序遍历

电脑杂谈  发布时间:2020-06-08 21:34:35  来源:网络整理

递归遍历二叉树的过程_二叉树的递归遍历_二叉排序树的遍历

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

递归遍历二叉树的过程_二叉排序树的遍历_二叉树的递归遍历

想法(递归):

递归遍历二叉树的过程_二叉排序树的遍历_二叉树的递归遍历

在后遍历序列中,最后一个数字是树的根节点. 数组中的前一个数字可以分为两部分: 第一部分是左子树节点的值,该值小于根节点的值;第二部分是左子树节点的值. 第二部分是右子树节点的值,大于根节点的值,然后递归判断前后两个部分是否满足上述原理.

二叉树的递归遍历_递归遍历二叉树的过程_二叉排序树的遍历

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence==null||sequence.length<=0) return false;
        return jude(sequence,0,sequence.length-1);
    }
    public boolean jude(int[] sequence,int start,int end){
        if(start>=end) return true;//要处理的数据只有一个或者已经没有数据要处理
        // 从左向右找第一个不小于根结点(sequence[end])的元素的位置
        int index=start;
        while((index<end-1)&&(sequence[end]>sequence[index]))
            index++;
        int right=index;
        //到这 [start,index-1]<[end]
        //保证[index, end-1]的所有元素都是大于根根点的值
        while(index<end-1&&sequence[end]<sequence[index])
            index++;
        if(index!=end-1) return false;
        index=right;
        return jude(sequence,start,index-1)&&jude(sequence,index,end-1);
    }
}

二叉排序树的遍历_递归遍历二叉树的过程_二叉树的递归遍历

递归方法的时间复杂度:

以标准的完美二叉搜索树为例,每个递归级别都涉及序列的遍历. 尽管层数越深二叉排序树的遍历,节点数越少(子树的根节点数越少),但是这种减少是微不足道的二叉排序树的遍历,即使在最低级别上,仍然存在n / 2个节点(第i层的节点数理想的二叉树是其上所有节点的总和+ 1),因此,每层递归方法的遍历成本为O(n),对于二叉树,递归层的平均数目为O(logn) ,因此,递归方法的最终复杂度为O(nlogn)


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

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

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