二叉树查找的时间复杂度

二叉排序树查找性能

原文链接:https://blog.csdn.net/li_huai_dong/article/details/79911069

给定值的比较次数等于给定值节点在二叉排序树中的层数。如果二叉排序树是平衡的,则n个节点的二叉排序树的高度为Log2(n+1),其查找效率为O(Log2n),近似于折半查找。如果二叉排序树完全不平衡,则其深度可达到n,查找效率为O(n),退化为顺序查找。一般的,二叉排序树的查找性能在O(Log2n)到O(n)之间。因此,为了获得较好的查找性能,就要构造一棵平衡的二叉排序树。

二叉查找树(Binary Search Tree, BST)是一种节点的左子树只包含小于该节点的数,右子树只包含大于该节点的数,并且左右子树也分别为二叉查找树的结构。在理想情况下,即树是平衡的,二叉查找树时间复杂度如下: ### 平衡二叉查找树时间复杂度 - **查找**:O(log n) - **插入**:O(log n) - **删除**:O(log n) 这是因为每次操作都只需要从根节点开始,沿着树的一条路径向下进行比较,直到找到目标节点或确定目标不存在为止。 然而,在最坏的情况下,比如当输入序列是有序的时候,二叉查找树可能会退化成链表,此时时间复杂度会变为O(n)。 以下是一个简单的Python实现二叉查找树的例子: ```python class TreeNode: def __init__(self, key): self.left = None self.right = None self.val = key def insert(root, key): if root is None: return TreeNode(key) else: if root.val < key: root.right = insert(root.right, key) else: root.left = insert(root.left, key) return root def search(root, key): if root is None or root.val == key: return root if root.val < key: return search(root.right, key) return search(root.left, key) # 使用例子 r = None r = insert(r, 50) r = insert(r, 30) r = insert(r, 20) r = insert(r, 40) r = insert(r, 70) r = insert(r, 60) r = insert(r, 80) result = search(r, 40) if result is not None: print("Found") else: print("Not Found") ``` 上述代码中`TreeNode`类定义了树的节点结构,`insert`函数实现了向BST中插入新节点的功能,而`search`函数则用于在BST中查找特定值。如果树保持平衡,这些操作都能在O(log n)时间内完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值