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)));
                    
                }
            }
            
        }
  • 相关阅读:
    十度好友问题
    TCP传输连接建立与释放详解
    Android多点触控技术实战,自由地对图片进行缩放和移动
    如何判断一个变量是数组Array类型
    HDU 4725 The Shortest Path in Nya Graph-【SPFA最短路】
    解决外贸电商难题,PayPal中国外贸电商大会圆满礼成
    动物-蛇:家蛇
    动物-蛇:水蛇
    动物-鱼:河蟹
    动物-鱼:河虾
  • 原文地址:https://www.cnblogs.com/dream-flying/p/12895294.html
Copyright © 2011-2022 走看看