• 剑指offer系列21--二叉搜索树的后续遍历序列


    * 21【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
    *      如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
    *    【注】二叉搜索树特点:左子树比根结点值小,右子树比根结点值大。
    *    【思路】①根据后序遍历结果确定根结点;
    *     ②判断所有左子树是否比根结点值小;
    *     ③判断所有右子树是否比根结点值大;
        * ④使用递归,继续分别判断左右子树中是否符合这一特点。

    package com.exe5.offer;
    
    /**
     * 21【题目】输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
     *             如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
     *    【注】二叉搜索树特点:左子树比根结点值小,右子树比根结点值大。
     *    【思路】①根据后序遍历结果确定根结点;
     *             ②判断所有左子树是否比根结点值小;
     *             ③判断所有右子树是否比根结点值大;
     *           ④使用递归,继续分别判断左右子树中是否符合这一特点。
     * @author WGS
     *
     */
    public class VerifySequenceOfBST {
    
        public boolean verifySequenceOfBST(int[] arrOfPostOrder){
            if(arrOfPostOrder==null) return false;
            int len=arrOfPostOrder.length;//7
            System.out.println("len:"+len);//7
            int rootVal=arrOfPostOrder[len-1];//根据后序遍历结果得到根结点值
            //判断左子树(<根结点值)
            int i=0;
            for(;i<len-1;i++){//3
                if(arrOfPostOrder[i]>rootVal)
                     break;
            }
            System.out.println(i);//3
            //判断右子树(>根结点值)
            for(int j=i;j<len-1;j++){
                if(arrOfPostOrder[j]<rootVal)
                     return false;
            }
            //继续判断左子树
            int[] leftTree=new int[(len-1)/2];//3
            System.arraycopy(arrOfPostOrder, 0, leftTree, 0, (len-1)/2);
            boolean leftFlag=true;
            if(i>0){
                leftFlag=verifySequenceOfBST(leftTree);
            }
            //继续判断右子树
            int[] rightTree=new int[(len-1)/2];//需要注意到的是此处建立数组时长度是在不断发生变化的
            System.arraycopy(arrOfPostOrder, (len-1)/2, leftTree, 0,len-i-1);
            boolean rightFlag=true;
            if(i<arrOfPostOrder.length-1){
                rightFlag=verifySequenceOfBST(rightTree);
            }
        
            return leftFlag&&rightFlag;
            
            
        }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int[] arr=new int[]{5,7,6,9,11,10,8};
            System.out.println(new VerifySequenceOfBST().verifySequenceOfBST(arr));
        }
    
    }
  • 相关阅读:
    Boolean()类型转换
    ECMAscript 变量作用域
    jQuery 添加样式属性的优先级别
    css类选择器类名覆盖优先级
    巡风扫描器安装-windows部署
    atom无法安装插件的解决方法之一
    网络爬虫url跳转代码
    查看天气的代码
    三级地名菜单
    购物清单代码
  • 原文地址:https://www.cnblogs.com/noaman/p/5458098.html
Copyright © 2020-2023  润新知