zoukankan      html  css  js  c++  java
  • 二叉搜索树的后序遍历序列(剑指Offer33)

    题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。

    如果是返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。

    例如,输入{5,7,6,9,11,10,8},返回true。

    输入{7,4,6,5},返回false。

     

    在做这道题之前我们先来熟悉一下二叉搜索树的概念:

    注意:二叉搜索树、二叉查找树(BST)、二叉排序树是同一个概念

    二叉查找树:
    1、若左子树不空,则左子树上所有结点的值均
    小于或等于它的根结点的值;
    2、若右子树不空,则右子树上所有结点的值均
    大于或等于它的根结点的值;
    3、左、右子树也分别为二叉查找树。
    4、等于的情况只能出现在左子树或右子树中的
    某一侧。
    由于二叉查找树的中序遍历是从小到大的,故又名
    二叉排序树。

    思路:在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分两部分:

    第一部分是左子树节点的值,它们都比根结点的值小;第二部分是右子树节点的值,它们都比根结点的值大;

    思考一下,我们就可以想出程序中要用到递归。

    根据根结点的值划分开左子树节点和右子树节点,用同样的方法分别处理左子树和右子树。

    代码思路很清晰,好好看看代码哦!!

     1 public class Solution {
     2     public boolean VerifySquenceOfBST(int [] sequence) {
     3         return IsBST(sequence,0,sequence.length);
     4     }
     5     public boolean IsBST(int [] sequence,int begin,int end) {
     6         if(sequence==null||begin<0||end>sequence.length||end<=begin) {
     7             return false;
     8         }
     9         int root=sequence[end-1];
    10         //在二叉搜索树中左子树节点的值小于根结点的值
    11         int i=begin;
    12         for(;i<end-1;i++) {
    13             if(sequence[i]>root) {
    14                 break;
    15             }
    16         }
    17         //在二叉搜索树中右子树节点的值大于根结点的值
    18         int j=i;
    19         for(;j<end-1;j++) {
    20             if(sequence[j]<root) {
    21                 return false;
    22             }
    23         }
    24         //判断左子树是不是二叉搜索树
    25         boolean left=true;
    26         if(i>begin) {
    27             left=IsBST(sequence,begin,i);
    28         }
    29         //判断右子树是不是二叉搜索树
    30         boolean right=true;
    31         if(i<end-1) {
    32             right=IsBST(sequence,i,end-1);
    33         }
    34         return (left&&right);        
    35     }
    36 }

     欢迎评论!!一起进步!!

  • 相关阅读:
    【Java基础】-switch支持的数据类型
    【微服务】微服务间的通信方式
    MyBatis中 #{}与${}的区别
    exeplorer-损坏的映像【错误状态0xc000012f】
    Java异常-常见的运行时异常和非运行时异常
    jvm-GC集合篇一之GC查找可回收垃圾算法
    JVM-栈的内存结构之--方法返回地址
    JVM-虚拟机栈的内部结构之局部变量表
    jvm-虚拟机栈(java栈)
    JVM-运行时数据区之---PC寄存器
  • 原文地址:https://www.cnblogs.com/hengzhezou/p/11039572.html
Copyright © 2011-2022 走看看