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

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

http://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd

一. 思路

按照平时的判断方法去想。只理解到使用递归思想。

前序遍历是根、左子树、右子树;
中序遍历是左子树、根、右子树;
后序遍历是左子树、右子树、根;

核心思路就是找到根,区分左右子树,判断是否违反了二叉搜索树的原则,即左子树<根<右子树。

二. 代码

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if (sequence == null || sequence.length == 0) return false;
        return helpVerify(sequence, 0, sequence.length-1);
    }

    public boolean helpVerify(int [] sequence, int start, int root) {
        if (start > root) return true;
        int i;
        //中序遍历是:左子树、右子树、根
        //找到左右子树的分界点
        for (i = start; i < root; i++) {
            if (sequence[i] > sequence[root]) break;
        }

        //在右子树中判断是否有小于root的值,若有则返回false
        for (int j = i; j < root; j++) {
            if (sequence[j] < sequence[root]) return false;
        }

        return helpVerify(sequence, start, i-1) && helpVerify(sequence, i, root-1);
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务