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

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

时间:2018-04-21 22:26:11      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:sequence   amp   修改   节点   enc   ++   部分   seq   arrays   

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

思路挺清晰的,但是不知道为什么,提交了好几次都只能通过部分用例,最后修修改改才通过的。总感觉我的这个做法不太好。

首先,后序遍历的最后一个元素是树的根节点root,然后可以将整个序列分成两个部分,分别是root的左子树和右子树,左子树的所有元素都比root小,右子树的所有元素都比root大。按照这个思路,就可以用左右子树分别递归,最后判断是否满足条件了。

代码如下:

public boolean VerifySquenceOfBST(int [] sequence) {
        int leftRoot = 0, rightRoot = sequence.length-1;

        if (sequence.length == 0) return false;

        if (sequence.length <= 3) return true;    //只有一个后序序列,当只有三个节点的时候只能返回true

        for (int i=0; i<sequence.length; i++) {     //找到第一个比root大的元素的位置,确定左子树的范围
            if (sequence[i] >= sequence[sequence.length-1]) {
                leftRoot = i;
                break;
            }
        }

        for (int i=leftRoot+1; i<sequence.length; i++) {    //判断右子树的所有元素是否比root大
            if (sequence[i] < sequence[sequence.length-1]) return false;
        }

        if (leftRoot >= rightRoot)
            return VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, leftRoot));
        if (leftRoot == 0)
            return VerifySquenceOfBST(Arrays.copyOfRange(sequence, leftRoot, rightRoot));

       return VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, leftRoot))
               && VerifySquenceOfBST(Arrays.copyOfRange(sequence, leftRoot, rightRoot));
 }

 

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

标签:sequence   amp   修改   节点   enc   ++   部分   seq   arrays   

原文地址:https://www.cnblogs.com/yi-hui/p/8903949.html

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