题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路解析:
二叉搜索树又称二叉排序树,根节点比左子树任意节点值大,比右子树的任意节点值小。而后序遍历的最后一个是根节点。于是:
- 将数组的从前到后的数据跟最后一个值比较,找到比根节点大的数组下标,这也是右子树的开始位置
- 然后判断右子树是不是都比根节点大,否则返回false
- 然后判断左子树和右子树是不是都是二叉排序树的后序遍历结果,此处递归。
代码:
public class Solution {
/*
方法:二叉搜索树中,左子树都是小于根节点的
*/
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence == null|| sequence.length==0)//判空
return false;
return VerifySequence(sequence,0,sequence.length-1);
}
private boolean VerifySequence(int[] seq,int start,int end){
if(start>=end)
return true;
int root =seq[end];
int i;
//找到第一个大于根节点的数字下标
for(i=start;i<end-1;i++){//除最后一个还剩end-1个数
if(seq[i]>root)
break;
}
for(int j=i;j<end-1;j++){
if(seq[j]<root)
return false;
}
return VerifySequence(seq,start,i-1)&& VerifySequence(seq,i,end-1);
}
}