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

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

中文English

给定一个二叉查找树和范围[k1, k2]。按照升序返回给定范围内的节点值。

样例

样例 1:

输入:{5},6,10
输出:[]
        5
它将被序列化为 {5}
没有数字介于6和10之间

样例 2:

输入:{20,8,22,4,12},10,22
输出:[12,20,22]
解释:
        20
       /  \
      8   22
     / \
    4   12
它将被序列化为 {20,8,22,4,12}
[12,20,22]介于10和22之间
 
 
输入测试数据 (每行一个参数)如何理解测试数据?

 中序遍历,递归

"""
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 not root: return []
        
        results = []
        self.midTravel(root, results,k1,k2)
        
        return results
    
    def midTravel(self, root,results, k1, k2):
        #递归出口
        if not root: return 
        
        self.midTravel(root.left,results, k1, k2)
        if (root.val >= k1) and (root.val <=  k2):
            results.append(root.val)
        
        self.midTravel(root.right,results,k1,k2)
            

 

posted @ 2020-08-27 21:19  风不再来  阅读(316)  评论(0编辑  收藏  举报