• 树9:二叉搜索树的后序遍历


    题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

    思路(递归):
    后序遍历 的序列中,最后一个数字是树的根节点 ,数组中前面的数字可以分为两部分:第一部分是左子树节点 的值,都比根节点的值小;第二部分 是右子树 节点的值,都比 根 节点 的值大,后面用递归分别判断前后两部分 是否 符合以上原则.

    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)

  • 相关阅读:
    Java 几个权限关键字
    Java变量的定义
    Hibernate反射DAO模式
    BroadcastReceiver与Notification的综合应用自定义Action的调用方式
    SEO优化技术之关键字
    中软国际助力四所高校建设国家级大学生校外实践教育基地
    讲师团队的培养
    IT与学习
    程序员,你的粮草何在?
    如何更好的学好Linux操作系统
  • 原文地址:https://www.cnblogs.com/xuechengmeigui/p/12988827.html
Copyright © 2020-2023  润新知