码迷,mamicode.com
首页 > 其他好文 > 详细

剑指——二叉搜索树的后序遍历

时间:2019-12-29 01:02:54      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:返回   break   下标   amp   bst   public   个数   左右   false   

二叉搜索树的后序遍历

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


解题思路

给出的数组是后序遍历,那么最后一个元素对应着树的根节点。

数组前部分对应左子树,其中元素都小于根节点;后部分对应右子树,其中元素都大于根节点。

再分别对左右子树进行递归地判断。


public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        //在Java中,数组指向unll和数组为空是不一样的概念,要将这两种特殊情况都排除
        if(sequence == null || sequence.length == 0)
            return false;
        //
        return helpVerify(sequence, 0, sequence.length - 1);
    }
    /**
    *helpVerify方法用于判断当前这个数组是否满足二叉搜索树的后序遍历数组
    *seq:当前被判断的数组
    *start:当前数组的第一个元素的下标
    *end:当前数组的最后一个元素的下标
    **/
    public boolean helpVerify(int[] seq, int start, int end){
        if(start >= end)
            return true;
        int root = seq[end];
        int i;
        //找到左右子树的分割处
        for(i = start; i < end - 1; i ++){
            if(seq[i] > root)
                break;
        }
        //判断分割处之后的数字是否都大于根节点的值,若不是则返回false
        for(int j = i; j < end - 1; j ++){
            if(seq[j] < root)
                return false;
        }
        //递归地判断左右子树
        return helpVerify(seq, start, i) && helpVerify(seq, i, end - 1);
    }
}

剑指——二叉搜索树的后序遍历

标签:返回   break   下标   amp   bst   public   个数   左右   false   

原文地址:https://www.cnblogs.com/peekapoo/p/12113552.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!