输入一个非空整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
来源:剑指offer
知识点:
- 后序遍历:输出顺序为左节点 - > 右节点 -> 根节点
- 二叉搜索树特性:左子树中节点值均小于根节点,右子树中节点值均大于根节点
简要思路:取出根节点,然后遍历数组,对数组中的值进行判断
详细思路:这题解法我觉得很好,判断数组是否是某二叉搜索树的后序遍历的结果,根据后序遍历的特性,给定数组的最后一个节点必定是根节点,数组中其他数据均是左子树或右子树中节点,我们要找到左子树和右子树的一个分界,分界左边的节点值均小于根节点,也就是最后一个节点的值,界右边的节点均大于根节点的值,也就是最后一个节点的值,去除最后一个根节点之后,对数组进行遍历,如果前面有一个不满足上述条件,则不是二叉搜索树后序遍历的结果
代码:
public class Solution {
public boolean VerifySquenceOfBST(int [] sequence) {
int size = sequence.length;
if(size == 0) return false;
int i = 0;
while (--size != 0){
while (sequence[i] < sequence[size]){
i++;
}
// 此时已经找出了边界,i 到 size为右子树中的节点
while (sequence[i] > sequence[size]){
i++;
}
if(i < size) return false;
i = 0;
}
return true;
}
}