二叉搜索树的后序序列
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出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); } }
立志如山 静心求实