剑指offer:二叉搜索树后序遍历
题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路:
递归思想,对于一个二叉排序树,其左子树必小于根节点,右子树必大于根节点
后续遍历的话,最后一位是根节点
i从0-length,直到找出比根节点大的,即为左子树,j从这里到length,即为右子树
再遍历判断右子树是否有小于根节点的 有即返回false
再递归判断左右子树是否满足这个条件即可
1 public class BSThouxu { 2 3 public boolean VerifySquenceOfBST(int [] sequence) { 4 if(sequence == null||sequence.length==0) return false; 5 if(sequence.length == 1) return true; 6 int len = sequence.length; 7 int i=0; 8 for( ; i < len-1;i++){ 9 if(sequence[i]>sequence[len-1]){ 10 break; 11 } 12 } 13 int j = i; 14 for(;j<len-1;j++){ 15 if(sequence[j]<sequence[len-1]){ 16 return false; 17 } 18 } 19 boolean left = true; 20 boolean right = true; 21 if(i>0){ 22 left = VerifySquenceOfBST(Arrays.copyOfRange(sequence, 0, i)); 23 } 24 if(i<len-1){ 25 right = VerifySquenceOfBST(Arrays.copyOfRange(sequence, i, len-1)); 26 } 27 return (left&&right); 28 } 29 30 public static void main(String[] args) { 31 // TODO Auto-generated method stub 32 33 } 34 35 }