题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
思路
1.二叉搜索树(二叉排序树)的特点是左节点<根<右节点(左子树<根<右子树),数组的左右一个元素为根节点
2.根节点的前面可分成两部门,前一部分(左子树)的值均小于根,后一部分(右子树)的值均大于根
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if (sequence == null || sequence.length == 0) {
return false;
}
if (sequence.length == 1) {
return true;
}
return isSquenceOfBST(sequence, 0, sequence.length - 1);
}
public boolean isSquenceOfBST(int[] seq, int start, int end) {
if (start >= end) {
return true;
}
int i = start;
while (seq[i] < seq[end]) {
++i;
}
for (int j = i; j < end; j++) {
if (seq[j] < seq[end]) {
return false;
}
}
return isSquenceOfBST(seq, start, i - 1) && isSquenceOfBST(seq, i, end-1);
}
}
网友评论