Lintcode 11. 二叉查找树中搜索区间

来源:互联网 发布:知来者犹可追 编辑:程序博客网 时间:2024/06/05 04:15

给定两个值 k1 和 k2(k1 < k2)和一个二叉查找树的根节点。找到树中所有值在 k1 到 k2 范围内的节点。即打印所有x (k1 <= x <= k2) 其中 x 是二叉查找树的中的节点值。返回所有升序的节点值。

思路:

从根节点开始搜索,有三种情况

1. 若当前节点值在范围内,那么先不要加入列表,而是递归对左侧子节点做同样的事,再将当前节点值加入列表,之后递归处理右侧节点。

2. 若当前节点值大于k2,那么就不需考虑其右子树了,递归处理左侧节点。

3. 若当前节点值小于k1,那么就不用考虑左子树了,递归处理右侧节点。

"""Definition of TreeNode:class TreeNode:    def __init__(self, val):        self.val = val        self.left, self.right = None, None"""class Solution:    """    @param: root: param root: The root of the binary search tree    @param: k1: An integer    @param: k2: An integer    @return: return: Return all keys that k1<=key<=k2 in ascending order    """    def searchRange(self, root, k1, k2):        # write your code here        if root is None:            return []        if k1 <= root.val <= k2:            return self.searchRange(root.left, k1, k2) + [root.val] + self.searchRange(root.right, k1, k2)        elif root.val < k1:            return self.searchRange(root.right, k1, k2)        else:            return self.searchRange(root.left, k1, k2)

Google TranslateGTranslateWinS Options