题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解法:
二叉树的后序遍历顺序:
左-右-根
对应到数组中的元素可得最后一个元素为根元素
根据二叉搜索树的特性,大于根元素的部分为右子树,小于根元素的部分为左子树
然后可以递归判断左右子树(因为左右子树又分别为二叉搜索树)
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0) return false;
return judge(sequence,0,sequence.length-1);
}
public boolean judge(int[] arr,int left,int right){
if(left>=right) return true;
int i = right;
//右子树的值都大于根节点的值,左子树的值都小于根节点的值
while(i>left && arr[i-1]>arr[right]) i--;
for(int j=i-1;j>=left;j--){
//如果左子树的值大于根节点的值,代表该数组不是二叉搜索树的后序遍历结果,直接返回false
if(arr[j]>arr[right]){
return false;
}
}
//递归判断左右子树
return judge(arr,left,i-1) && judge(arr,i,right-1);
}
}