📅  最后修改于: 2023-12-03 14:54:56.012000             🧑  作者: Mango
二叉搜索树(Binary Search Tree),也叫二叉排序树(Binary Sort Tree)或二叉查找树(Binary Search Tree),是一种重要的数据结构。
二叉搜索树是一棵空树或具有以下性质的二叉树:
在二叉搜索树中,对于任意一个节点,它的左子树中的所有节点都比它小,右子树中的所有节点都比它大。因此,它可以高效地支持查找、插入和删除元素等操作。
本文将介绍二叉搜索树的问题1:如何在二叉搜索树中查找一个元素。
在二叉搜索树中查找一个元素,可以使用以下递归方法:
def search_bst(root, val):
"""
在二叉搜索树中查找一个元素
"""
if not root or root.val == val:
# 如果根节点为空或者根节点的值等于val,则返回根节点
return root
elif root.val < val:
# 如果根节点的值小于val,则在右子树中继续查找
return search_bst(root.right, val)
else:
# 如果根节点的值大于val,则在左子树中继续查找
return search_bst(root.left, val)
其中,root
为二叉搜索树的根节点,val
为需要查找的元素。
如果根节点为空或者根节点的值等于val
,则返回根节点。如果根节点的值小于val
,则在右子树中继续查找;如果根节点的值大于val
,则在左子树中继续查找。直到找到该元素或者遍历完整棵树都没有找到为止。
同时,也可以使用迭代方法实现:
def search_bst(root, val):
"""
在二叉搜索树中查找一个元素
"""
while root and root.val != val:
# 如果根节点不为空且根节点的值不等于val,则继续查找
if root.val < val:
# 如果根节点的值小于val,则在右子树中查找
root = root.right
else:
# 如果根节点的值大于val,则在左子树中查找
root = root.left
return root
二叉搜索树中的元素都是有序的,因此可以使用二分查找的思想来查找元素。在二叉搜索树中查找一个元素的时间复杂度为$O(logn)$,其中$n$为二叉搜索树中元素的个数。