二叉搜索树的后序序列

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

在后序遍历得到的序列中,最后一个数字是树的根结点的值。数组中前面的数字可以分为两部分:第一部分是左子树结点的值,它们都比根结点的值小;第二部分是右子树结点的值,它们都比根结点的值大

  因此,我们可以总结出算法步骤:

  Step1.通过取出序列最后一个元素得到二叉搜索树的根节点;

  Step2.在二叉搜索树中左子树的结点小于根结点,因此可以遍历一次得到左子树;

  Step3.在二叉搜索树中右子树的结点大于根结点,因此可以继续遍历后序元素得到右子树;

  Step4.重复以上步骤递归判断左右子树是不是二叉搜索树,如果都是,则返回true,如果不是,则返回false;

public class Solution {
   
    
    public boolean verifyBinaryTree(int[] sequence,int start,int end){
        
        int root=sequence[end-1];
        int i=start;
        for(;i<end-1;i++){
            if(sequence[i]>root)
                break;
        }
        
        int j=i;
        for( ; j<end-1;j++){
            if(sequence[j]<root) return false;
        }
        
        boolean left=true;
        if(i>0)
           left=verifyBinaryTree(sequence,0,i);
        boolean right=true;
        if(i<end-1)
            right=verifyBinaryTree(sequence,i,end-1);
        return left&&right;
    }
    public boolean VerifySquenceOfBST(int [] sequence) {
        
        if(sequence==null || sequence.length==0)
           return false;
        return verifyBinaryTree(sequence,0,sequence.length);
        
    }
}

  

posted on 2018-08-13 23:08  溪水静幽  阅读(119)  评论(0)    收藏  举报