二叉搜索树的后序遍历序列
题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。
假设输入的数组的任意两个数字都互不相同。
解题思路
首先根据二叉树后序遍历的特点,左子树都小于根节点,而右子树均大于根节点
- 从第0位开始,找到第一位比根节点大的元素,记录元素位置i,在此之前的元素都属于左子树(已经判定左子树都小于根节点)
- 然后从i开始,判断右子树是否都大于根节点
- 递归判断
public class Solution {
public boolean VerifySquenceOfBST(int[] sequence) {
if (sequence == null || sequence.length == 0) {
return false;
}
boolean res = Judge(sequence, 0, sequence.length - 1);
return res ;
}
private boolean Judge(int[] s, int start, int end) {
int i = 0;
int j = 0;
if (end - start <= 1) {
return true;
}
for (i = start; i < end; i++) {
if (s[i] > s[end]) {
break;
}
}
for (j = i ; j < end; j++) {
if (s[j] < s[end]) {
return false;
}
}
boolean left = true;
boolean right = true;
if (i > 0) {
left = Judge(s, start, i - 1);
}
if (i < s.length - 1) {
right = Judge(s, i, end - 1);
}
return left && right;
}
}