【剑指offer】判断数组是否是二叉搜索树的后序遍历结果

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

来源:剑指offer

知识点:

  • 后序遍历:输出顺序为左节点 - > 右节点 -> 根节点
  • 二叉搜索树特性:左子树中节点值均小于根节点,右子树中节点值均大于根节点

简要思路:取出根节点,然后遍历数组,对数组中的值进行判断

详细思路:这题解法我觉得很好,判断数组是否是某二叉搜索树的后序遍历的结果,根据后序遍历的特性,给定数组的最后一个节点必定是根节点,数组中其他数据均是左子树或右子树中节点,我们要找到左子树和右子树的一个分界,分界左边的节点值均小于根节点,也就是最后一个节点的值,界右边的节点均大于根节点的值,也就是最后一个节点的值,去除最后一个根节点之后,对数组进行遍历,如果前面有一个不满足上述条件,则不是二叉搜索树后序遍历的结果

代码:


public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        int size = sequence.length;
        if(size == 0) return false;
        int i = 0;
        while (--size != 0){
            while (sequence[i] < sequence[size]){
                i++;
            }
            // 此时已经找出了边界,i 到 size为右子树中的节点
            while (sequence[i] > sequence[size]){
                i++;
            }
            if(i < size) return false;
            i = 0;
        }
        return true;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章