zoukankan      html  css  js  c++  java
  • 剑指offer-第四章解决面试题思路(判断一个数组是否为二叉搜索树的后序遍历序列)

    二叉搜索树:二叉搜索树根节点的左边都比根节点小,右边都比根节点大。

    例题:输入一个数组,判断是否为二叉搜索树的后序遍历序列,如果是,返回true,如果不是,返回flase,假设没有重复的元素。

    思路:由于是后序遍历,所以数组的最后一个节点是根节点,而且,由于是二叉收索树,所以,前面的数据被分为两部分,右边部分比根节点小,左边比根节点大。左右两边又分别为二叉收索树,因此可以用递归来实现。

    Java代码:

    public class IsBinarySearchTree {
    
         public boolean isBST(int[] sequence,int start,int len){
             if(sequence==null||len<=0)
                 return false;
             
             int root=sequence[len-1];
             //二叉搜索树的左边都小于根节点,右边都大于根节点。
             int i=0;
             while(i<len-1){
                 if(sequence[i]>root)
                     break;
                 i++;
             }
             int j=i;
             while(j<len-1){
                 if(sequence[j]<root)
                     return false;
                 j++;
             }
             //判断左子树是不是二叉搜索树
             boolean left=true;
             if(i>0)
                left=isBST(sequence,0,i);
             //判断右子树是不是二叉搜索树
             boolean right=true;
             if(i<len-1)
                 right=isBST(sequence,i,len-i-1);
             return left&&right;
             
       }
         public static void main(String[] args) {
             int[] a={3,5,6};
            IsBinarySearchTree ibt=new IsBinarySearchTree();
            if(ibt.isBST(a, 0, a.length)){
               System.out.println("is BinarySearchTree endRoot");
            }
            else
                System.out.println("is not BinarySearchTree endRoot");
        }
    }
  • 相关阅读:
    spirngmvc整合mybatis
    C#微信支付
    centos mysql数据库主从同步
    centos 搭建ftp
    修改 Docker 默认网桥地址
    安装docker
    脚本自动化装centos6.5 python2.6升级2.7
    centos6.5 python2.6升级2.7
    weblogic 安装及发布web应用
    centos6.5安装pip方法
  • 原文地址:https://www.cnblogs.com/hupp/p/4738895.html
Copyright © 2011-2022 走看看