public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence == null || sequence.length == 0){
return false;
}
return verify(sequence, 0, sequence.length-1);
}
public boolean verify(int[] sequence, int start, int end){
if(start >= end){
return true;
}
int root = sequence[end];
int leftEnd = -1;
// 寻找左右子树分隔点
for(int i = start; i <= end; i++){
if(sequence[i] >= root){
leftEnd = i-1;
break;
}
}
boolean leftLegal = true;
// 存在左子树
if(leftEnd >= start){
// 继续判断左子树
leftLegal = verify(sequence, start, leftEnd);
}
boolean rightLegal = true;
// 存在右子树
if(leftEnd + 1 < end){
// 判断右子树中元素是否都大于根元素
for(int i = leftEnd+1; i < end-1; i++){
if(sequence[i] < root){
return false;
}
}
// 继续判断右子树
rightLegal = verify(sequence, leftEnd+1, end-1);
}
return leftLegal && rightLegal;
}
}
判断一个数组序列是否为某个二叉搜索树的后序遍历结果
最新推荐文章于 2023-03-19 11:29:26 发布