题目
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。(ps:我们约定空树不是二叉搜素树)
思想
1.用递归方法,先找到根,分出左右子树
2.上下约束法
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length == 0 || sequence == null)
return false;
return verify(sequence,0,sequence.length-1);
}
private boolean verify(int[] sequence,int start,int root)
{
if(start >= root)
return true;
int key = sequence[root];
int splitIndex = 0;
for(int i = start;i < root;i++)
{
if(sequence[i] > key)
{
splitIndex = i;
break;
}
}
for(int j = splitIndex;j < root;j++)
{
if(sequence[j] < key)
return false;
}
return verify(sequence,start,splitIndex-1)&&verify(sequence,splitIndex,root-1);
}
}