题目描述
给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。
例子:如果有 k1 = 10 和 k2 = 22, 你的程序应该返回 [12, 20, 22]
1 | 20 |
思路
因为是二叉查找树,最直接的方式就是左中右遍历二叉树
对每一个节点,如果其val符合条件,则添加到list改进算法
针对遍历过程中的每一个root节点,如果其val在查找范围之外,则只选择其一个分支进行递归,直到root的val落在查找范围内,再用基本的二叉查找树遍历算法
代码
基本算法
1 | public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { |
改进算法
1 | public ArrayList<Integer> searchRange(TreeNode root, int k1, int k2) { |
考察点
- 二叉查找树的遍历