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

Posted peekapoo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指——二叉搜索树的后序遍历相关的知识,希望对你有一定的参考价值。

二叉搜索树的后序遍历

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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);
    }
}

以上是关于剑指——二叉搜索树的后序遍历的主要内容,如果未能解决你的问题,请参考以下文章

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

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

剑指offer 24:二叉搜索树的后序遍历序列

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

Java 剑指offer(33) 二叉搜索树的后序遍历序列

剑指Offer-Java-二叉搜索树的后序遍历序列