刷leetcode进入了中等题目阶段,发现二叉搜索树有一些解题技巧可循,故记录于此。
一、题目1:二叉搜索树的后序遍历序列(剑指Offer 33)
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同。
参考以下这颗二叉搜索树:
5
/ \
2 6
/ \
1 3
示例:
输入: [1,6,3,2,5]
输出: false
解:
要把握住后序遍历和二叉搜索树的后序遍历的特性:
1. 后序遍历的两个特性
① 最后一个节点是根节点
② 先左子树、后右子树,根节点放在最后最后最后
2.二叉搜索树的特性
左子树比根节点小,右子树比根节点大
3.二叉搜索树的后序遍历的特性
① 根节点在最后;
② 第一个比根节点大的数,一定在右子树,数组中它左边的所有值,一定在左子树;它右边的所有值,一定在右子树(除了最后的根节点)
③ 这样再去对左子树、右子树做相同的判断,递归+分治,即可完成判断任务。
补充:二叉搜索树的中序遍历特性
二叉搜索树的中序遍历结果,是从小到大排列的一个有序数组。