首先给出二叉搜索树的定义:
若对于树中任一节点r ,左(右)子树中的节点(若存在)均不大于(不小于)r ,则称之为二叉搜索树(binary search tree),简称为 BST ,简而言之,即处处满足这种顺序性的二叉树为二叉搜索树。
如下所示:
根据上文定义,根节点和左右子树可能出现重复元素,所以可能会返回多个关键码值,都返回即可。大家注意这点。
儿查搜索树的查找与二分查找极为相似,大家不妨想一想,每比较一次都能将有效区间长度减半。
注意二叉树节点定义为如下:
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
如果target
小于root.val,则一定位于左侧分支,反之位于右分支;如果等于root.val
,则加入到返回列表中,但是还要继续查找,而不是立即返回。
def searchNode(root: TreeNode, target: int)->List[TreeNode]:
"""
root: 二叉搜索树的根节点
target: 节点的val值
返回值:等于val的所有节点
"""
r = []
def search(root,target):
if not root:
return r
if target == root.val:
r.append(target)
search(root.left,target)
search(root.right,target)
elif target < root.val:
search(root.left,target)
else:
search(root.right,target)
search(root,target)