剑指offer系列:二叉搜索树的后序遍历序列

描述

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

代码

public class Solution {
    public boolean VerifySquenceOfBST(int [] sequence) {
        if(sequence.length==0){
            return false;
        }
        int i = sequence.length-1;
        return judge(sequence,0,i);
        
    }
    
    boolean judge(int[] arr,int left,int right){
        if(left>=right){
            return true;
        }
        int root = arr[right];
        int i = left;
        while(arr[i]<root){
            i++;
        }
        int j = i;
        while(j<right){
            if(arr[j]<root){
                return false;
            }
            j++;
        }
       return judge(arr,0,i-1)&&judge(arr,i,j-1);
    }
}

心得

二叉树的后续遍历 左 右 根 ,所以从后往前依次是 根 右子树 左子树
只需要验证左子树均小于根 右子树均大于根 且 子树也符合上面的要求

你可能感兴趣的:(剑指offer算法)