题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出 Yes,否则输出 No。假设输入的数组的任意两个数字都互不相同。
解题思路
已知条件:后序序列最后一个值为 root;二叉搜索树左子树值都比 root 小,右子树值都比 root 大。
-
确定 root;
-
遍历序列(除去 root 结点),找到第一个大于 root 的位置,则该位置左边为左子树,右边为右子树;
-
遍历右子树,若发现有小于 root 的值,则直接返回 false;
-
分别判断左子树和右子树是否仍是二叉搜索树(即递归步骤 1、2、3)。
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length == 0)
return false;
return isPostBST(sequence, 0, sequence.length-1);
}
private boolean isPostBST(int[] sequence, int start, int end) {
if (end <= start)
return true;
int i = start;
for (; i < end; i++) {
if (sequence[i] > sequence[end])
break;
}
for (int j = i; j < end; j++) {
if (sequence[j] < sequence[end])
return false;
}
return isPostBST(sequence, start, i-1) && isPostBST(sequence, i, end-1);
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于