美文网首页
二叉搜索树的后序遍历序列

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

作者: Hammy | 来源:发表于2018-01-31 22:27 被阅读0次

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

思路:
后序遍历的结果最后一个元素是根元素,比根元素大的是右子树序列,小的是左子树序列.我们根据这个特性就可以通过递归解决这个问题.

代码

/**
 * Created by Hammy on 2018/1/31.
 */
public class VerifySquenceOfBST
{
    public boolean VerifySquenceOfBST(int[] sequence){
        if(sequence == null || sequence.length == 0){
            return false;
        }

        return VerifySquenceOfBST(sequence,0,sequence.length - 1);
    }

    /**
     * 核心思路是递归
     * 找到小于根节点的点然后递归
     * 如果根节点左边的元素大于右边的元素直接返回false
     * @param sequence
     * @param left
     * @param right
     * @return
     */
    private boolean VerifySquenceOfBST(int[] sequence,int left,int right){
      //到达这部说明遍历的元素符合左子树小于右子树的规定
        if(left >= right){
            return true;
        }
        int temp = right - 1;
        while(temp >= left && sequence[temp] > sequence[right]){
            temp--;
        }
        //现在temp指向的是左子树序列的最后一个元素
        for(int i = temp ; i >= left ;i--){
            if(sequence[i] > sequence[right])
                return false;
        }
        return VerifySquenceOfBST(sequence,left,temp)&&
               VerifySquenceOfBST(sequence,temp+1,right-1);

    }
}

相关文章

网友评论

      本文标题:二叉搜索树的后序遍历序列

      本文链接:https://www.haomeiwen.com/subject/puqrzxtx.html