美文网首页
《剑指offer》(二十三)--二叉搜索树的后序遍历序列(jav

《剑指offer》(二十三)--二叉搜索树的后序遍历序列(jav

作者: 鼠小倩 | 来源:发表于2020-01-03 14:31 被阅读0次

    二叉搜索树的后序遍历序列

    考点:栈、树

    题目描述

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

    代码格式

    public class Solution {
        public boolean VerifySquenceOfBST(int [] sequence) {        
        }
    }
    

    二叉搜索树:(又:二叉查找树,二叉排序树)具有下列性质
    (1)若左子树不空,则左子树上所有结点的值均小于它的根结点
    (2)若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    (3)左、右子树也分别为二叉排序树;
    (4)没有键值相等的节点。


    image.png

    解题
    1.思路
    如上图:后序遍历是,左右根:[1,4,7,6,3,13,14,10,8],可以知道根结点是8,再结合图再从左往右分析后序序列,分析子树,可以发现:

    • [1,4,7,6,3] 8 [13,14,10]
    • 左子树 :[1,4] 3 [7,6]
    • 左子树:10 [13,14]
      ......

    本题是利用递归思想,判断根节点的左子树元素是否小于根节点,右子树元素是否大于根节点。重点在于对左右子树的划分(因为传入的是个数组)
    (1)从第0位开始,找到第一位比根节点大的元素,记录此位置i。在此位置之前都属于左子树(此时已经断定左子树都小于根节点)
    (2)检查右子树是否都大于根节点(从第i位开始,到根节点前)
    (3)判断左右子树是否都属于二叉搜索树。
    2.代码

    public class Solution {
        public boolean VerifySquenceOfBST(int [] sequence) {
            if(sequence==null||sequence.length==0){
                return false;
            }
            //调用getResult方法
            boolean result=getResult(sequence,0,sequence.length-1);
            return result;     
        }
        
        //定义一个getResult()方法
        public boolean getResult(int[] s,int start,int end){
            int i=0;
            int j=0;
            if(end-start<=1){
                return true;
            }
            for(i=start;i<end;i++){
                if(s[i]>s[end]){
                    break;
                }
            }
            
            for(j=i;j<end;j++){
                if(s[j]<s[end]){
                    return false;
                }
            }
            
            boolean left=true;
            boolean right=true;
            if(i>0){
                left=getResult(s,start,i-1);
            }
            if(i<s.length-1){
                right=getResult(s,i,end-1);
            }
            
            return left&&right;
        }
    }
    

    相关文章

      网友评论

          本文标题:《剑指offer》(二十三)--二叉搜索树的后序遍历序列(jav

          本文链接:https://www.haomeiwen.com/subject/cvixactx.html