题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
使用递归:
二叉搜索树的中序遍历是一个递增序列。
后续遍历,序列的最后一个值是根结点,左子树的所有结点值都小于根结点的值,右子树的所有结点的值都大于根结点的值。故序列除了最后一个值,剩余的值可以分成两个部分,左边一部分都小于最后一个值,右边一部分都大于最后一个值。递归判断左右子树,如果都复合这样的规律,则是后序遍历的结果。
import java.util.Arrays;
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length==0) return false;
return isBST(sequence,0,sequence.length-1);
}
public boolean isBST(int[] arr,int s,int e){
if(s>=e) return true;
int k=s;
while(s<e&&arr[s]<arr[e]) k=++s;
while(s<e&&arr[s]>arr[e]) s++;
if(s>=e){
return isBST(arr,s,k-1)&&isBST(arr,k,e-1);
}else{
return false;
}
}
}