本题为剑指offer面试题24.
牛客网测试地址:https://www.nowcoder.com/questionTerminal/a861533d45854474ac791d90e447bafd
[编程题]二叉搜索树的后序遍历序列
- 参与人次:81730次时间限制:1秒空间限制:32768K
- 算法知识视频讲解
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
代码如下:
package go.jacob.day427;
public class Demo1 {
public boolean VerifySquenceOfBST(int[] sequence) {
/*
* 判空条件必须是两个:
* |--sequence == null为true,不会执行sequence.length == 0
* |--sequence == null为false,执行sequence.length == 0不会报空指针异常
*/
if (sequence == null || sequence.length == 0)
return false;
int N = sequence.length;
return VerifySquenceOfBST(sequence, 0, N - 1);
}
private boolean VerifySquenceOfBST(int[] sequence, int left, int right) {
if (left >= right)
return true;
int root = sequence[right];
//i记录比root(根节点)大的第一个元素的索引
int i = left;
for (; i < right - 1; i++) {
if (sequence[i] > root)
break;
}
//如果右子树有元素小于root,返回false;
for (int j = i; j < right - 1; j++) {
if (sequence[j] < root)
return false;
}
//否则递归求解左子树和右子树
return VerifySquenceOfBST(sequence, left, i - 1) && VerifySquenceOfBST(sequence, i, right - 1);
}
}