题目描述:
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
解题思路:
二叉排序树后续遍历最后面那个数字一定是根节点,根据这个特性我们可以先找到左子树,左边的节点的数值应该都比根节点要小,右边的节点都要比根节点要大,直接进行递归就行,如果出现不符合该规律的序列,那么就直接结束二叉排序树
解题代码:
public class Offer {
public static boolean VerifySquenceOfBST(int[] sequence) {
if (sequence.length == 0) {
return false;
}
if (sequence.length == 1) {
return true;
}
return judge( sequence,0,sequence.length-1);
}
public static boolean judge(int[] sequence,int start,int root){
if(start>=root){
return true;
}
int i=start;
while(i<root&&sequence[i]<sequence[root]){
i++;
}
for(int j=i;j<root;j++){
if(sequence[j]<sequence[root]){
return false;
}
}
return (judge(sequence,start,i-1))&&(judge(sequence,i,root-1));
}
public static void main(String[] args) {
TreeNode oneNode=new TreeNode(12);
TreeNode twoNode=new TreeNode(5);
TreeNode threeNode=new TreeNode(18);
TreeNode fourNode=new TreeNode(2);
TreeNode fiveNode=new TreeNode(9);
TreeNode sixNode=new TreeNode(15);
TreeNode sevenNode=new TreeNode(19);
oneNode.left=twoNode;
oneNode.right=threeNode;
twoNode.left=fourNode;
twoNode.right=fiveNode;
threeNode.left=sixNode;
threeNode.right=sevenNode;
int[]test={2,9,5,15,19,18,12};
boolean res = VerifySquenceOfBST(test);
System.out.println(res);
}
}