zoukankan      html  css  js  c++  java
  • 判断给出的序列是否为二叉搜索树的后序遍历结果

    问题

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

    分析

      (1)后序遍历的最后一个元素一定是头结点,根据头结点对序列进行划分。

      (2)划分后的子序列依然遵循(1)的规则。所以继续划分。

      (3)子序列只包含1或2个节点,返回true。

      (4)当划分的子序列中存在非法元素,此次判断为false。非法元素的意思是划分后左子序列应该都大于头结点,其中<头结点的元素即为非法元素。

    code

    public boolean VerifySquenceOfBST(int [] sequence) {
            
            //结束条件判断
            if(sequence==null || sequence.length==0) {
                return false;
            }else if(sequence.length==2 || sequence.length==1) {
                return true;
            }else {
                System.out.println(sequence.length);
                int val = sequence[sequence.length-1];
                int index=0;
                //找到分割点
                boolean flag=false;  //如果子集不合法,返回false
                for(int i=0;i<sequence.length;i++) {
                    if(!flag &&sequence[i]>val) {
                        index = i;
                        flag=true;
                    }
                    if(flag && sequence[i]<val) {
                        return false;
                    }
                    
                }
                if(index==sequence.length || index==0) {
                    return VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, sequence.length-1));
                }else{
                    return (VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, index)) &&
                            VerifySquenceOfBST(Arrays.copyOfRange(sequence, index, sequence.length-1)));
                    
                }
            }
            
        }
  • 相关阅读:
    java核心技术卷上学习笔记
    个人作业——软件工程实践总结作业
    个人作业——软件产品案例分析
    软件工程作业-结对编程 2.0
    软件工程作业-结对编程 1.0
    软件工程作业2.0
    软件工程作业1.0
    《面向对象程序设计》c++第六次作业___calculator SE
    面向对象程序设计作业 6.1~6.4
    面向对象程序设计作业 5.1~5.5
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12895294.html
Copyright © 2011-2022 走看看