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

来源:互联网 发布:软件版权说明 编辑:程序博客网 时间:2024/06/07 06:24

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

2、思路:后续遍历中,最后一个元素为根节点,小于根节点的元素在左子树,大于根节点的在右子树。

3、代码:

public boolean VerifySquenceOfBST(int [] sequence) {        int start = 0, end = sequence.length - 1;        if(end == -1)            return false;        boolean isOrder = verifySquenceOfBST(sequence, start, end);        return isOrder;    }    private boolean verifySquenceOfBST(int[] sequence, int start, int end) {        boolean isOrder = true;        int i, pos = end;        int root_val = sequence[end];         //找到分界点,pos为右子树的起点        for(i = start; i < end; i++){            if(sequence[i] > root_val){                pos = i;                break;            }        }        //遍历右子树,需要右子树每一个阶段都大于root_val才满足要求        for(i = pos; i < end; i++){            if(sequence[i] < root_val)                isOrder = false;        }        boolean isLeftOrder = true, isRightOrder = true;        if(isOrder){            if(pos - start > 1){ //左子树的节点数大于1                isLeftOrder = verifySquenceOfBST(sequence, start, pos - 1);            }            if(end - pos > 1){ //右子树结点数大于1                isRightOrder = verifySquenceOfBST(sequence, pos, end - 1);            }        }        return isOrder && isLeftOrder && isRightOrder;    }
原创粉丝点击