二叉查找树|二叉搜索树
-
基本概念:二叉查找树支持动态数据结合的快速插入、删除和查找
- 散列表可以实现O(1)的查找,为什么不用散列表
-
特点:左子树的值小于节点,右子树的值大于节点
-
相关操作
-
查找操作
- 取根节点,等于则返回
- 小于在左子树递归查询
- 大于在右子树递归查询
-
插入操作
- 插入元素比节点大,且节点右子树为空,则插入右节点位置
- 插入元素比节点小,且节点左子树为空,则插入左节点位置
-
删除操作(可以简单标记不可用)
- 删除空 跳过
- 删除叶子节点|自驾游一个子节点 直接删除,并替换子节点
- 先将右子树的最小节点进行替换,然后删除该节点
-
-
其他操作
-
中序遍历二叉树可以输出有序数据序列,时间复杂度是O(n)
-
重复二叉树查找
- 将相同的值存储在一个节点上,并记录次数
- 将相等的元素插入右子树
-
-
时间复杂度分析
- 时间复杂度 最坏情况,遍历树高log2n n退化成链表
- 平衡的二叉树 插入、删除、查找操作的时间复杂度O(logn)
总结
-
二叉查找树比散列表的优势
- o(n)获取有序数据
- 散列表底层仍然是数组,存在扩容的情况
- 散列表因哈希冲突的时间复杂度不稳定,二叉树查找是稳定的
- \
\