题目:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
- 二叉搜索树满足左子树<root<右子树
- 题目判断是否满足 说明每个子树都要满足这个条件
- 子树与整个二叉树是同构的 所以可以使用递归判断
- 总体:找到第一个大于根节点的节点 -根 判断是否满足右子树
- 不满足return false
- 满足的话 左子树 右子树 又是二叉搜索树 判断是否满足 所以调用VerifySquenceOfBST()
代码:
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length<=0)
return false;
if(sequence.length==1)
return true;
return verify(sequence,0,sequence.length-1);
}
public boolean verify(int[] arr,int start,int end){
if(start>=end)
return true;
int mid=start;
while(arr[mid]<arr[end])//判断左子树是否满足 遇到一个大于root.val的 默认切换到右子树
mid++;
for(int i=mid;i<end;i++){//判断右子树
if(arr[i]<arr[end])
return false;
}
return verify(arr,start,mid-1)&&verify(arr,mid,end-1);//递归
}