一、题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。
如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
二、解题思路
在后序遍历序列中,最后一个数字是树的根节点的值。数组中前面的数字可以分为两部分:第一部分是左子树节点的值,它们都比根节点的值小;第二部分是右子树节点的值,它们都比根节点的值大。
所以先取数组中最后一个数,作为根节点。然后从数组开始计数比根节点小的数,并将这些记作左子树,然后判断后序的树是否比根节点大,如果有点不满足,则跳出,并判断为不成立。全满足的话,依次对左子树和右子树递归判断。
三、java代码
public class Solution_24 {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length<=0){
return false;
}
return verifySquenceOfBST(sequence, 0, sequence.length-1);
}
public boolean verifySquenceOfBST(int [] sequence,int start,int end){
if(start>=end) return true;
int root = sequence[end];
int i = start;
while(sequence[i]<root)
++i;
int j = i;
while(j<end){
if(sequence[j]<root)
return false;
++j;
}
boolean left = verifySquenceOfBST(sequence, start, i-1);
boolean right = verifySquenceOfBST(sequence, i, end-1);
return left&&right;
}
}