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

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

题目描述

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

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

题目分析

什么是二叉搜索树(BST)

二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。

题解思路

image

代码

 public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence == null || sequence.length == 0) return false;
            int len = sequence.length;
            int i = 0;
            int root = sequence[len - 1];

            //二叉搜索树中左节点小于root 当大于root时跳出循环
            for(; i <len-1 ;i++){//注意这里i不能取到len - 1,最后一个数为root
                if(sequence[i] > root){
                    break;
                }
            }

            //右子树的起始点
            int j = i;

            //二叉搜索树中右节点大于root 当小于root返回false
            for(; j < len-1; j++){
                if(sequence[j] < root) return false;
            }

            boolean leftFlg = true;
            boolean rightFlg = true;
            //判断左子树是否是二叉搜索树
            if(i > 0){
                leftFlg = VerifySquenceOfBST( Arrays.copyOfRange(sequence,0,i ));
            }
            //判断右子树是否是二叉搜索树
            if(i < len -1 ){
                rightFlg = VerifySquenceOfBST(Arrays.copyOfRange(sequence,i,len-1 ));
            }

            return (leftFlg&&rightFlg);

    }

总结

  • 采用copyOfRange()方法复制数组的一部分,安利一下(要注意的是区间范围是左闭右开)
  • 注意sequence为空的情况
原文地址:https://www.cnblogs.com/flyingcr/p/10428294.html