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

来源:互联网 发布:linux yum jdk 1.8 编辑:程序博客网 时间:2024/05/29 15:15

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

解题思路

二叉搜索树具有左孩子小于当前节点,右孩子大于当前节点的性质,后序遍历及左右根,因而后序遍历序列中的最后一个节点即为根节点,然后对前面的节点进行遍历,小于根节点的属于左子树,大于根节点的属于右子树,找到分界点,如果在分界点右侧存在大于根节点的节点那么这个遍历序列不可能是二叉搜索树的遍历序列。进行递归调用判断左子树和右子树。

public class erchashudehouxubianlixulie {    public boolean isBackSequence(int[] sequence, int start, int end) {        if (start >= end)            return true;        int root = sequence[end];        int index = 0;        while (sequence[index] < root)            index++;        for (int i = index; i < end - 1; i++) {            if (sequence[i] < root)                return false;        }        return isBackSequence(sequence, start, index - 1) && isBackSequence(sequence, index, end - 1);    }    public boolean VerifySquenceOfBST(int[] sequence) {        if (sequence == null || sequence.length == 0)            return false;        return isBackSequence(sequence, 0, sequence.length - 1);    }}
原创粉丝点击