条件:二叉搜索树&&后序遍历
如果是,那么数组的左部分的值均小于根节点即数组尾节点,右半部分至倒数第二个节点大于根节点的值,这是由后序遍历二叉搜索树的性质决定的。
代码如下:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence==null||sequence.length<=0)
return false;
return VerifySquenceOfBST(sequence,0,sequence.length-1);
}
private 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;
}
}
时间O(N^2) 空间O(N)
我的理解是每次选择一个根节点,根节点之前的节点都会被遍历
写法有点像二分或者分治,分治是小问题解决最后大问题解决