题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
示例1
- 输入
[4,8,6,12,16,14,10]
- 返回值
true
解题思路
我们知道二叉搜索树,左子树<根结点<右子树。后序遍历,最后一个结点为根结点,因此绿色的10为根结点。
遍历数组,找到第一个大于根结点的结点,说明前面的为左子树
继续向后遍历,如果有小于根结点的,则返回false,否则,后面的为右子树
递归进行
如下图所示
代码
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
if(sequence.length <= 0)
return false;
return VerifySquence(sequence, 0, sequence.length-1);
}
public boolean VerifySquence(int [] sequence, int start, int end) {
if(start >= end)
return true;
int root = sequence[end];
int m = start;
while(sequence[m] < root) {
m++;
}
int n = m;
while(n <= end) {
if(sequence[n] < root)
return false;
n++;
}
return VerifySquence(sequence, start, m-1) && VerifySquence(sequence, m, end-1);
}
}