24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?

230 阅读1分钟

二叉查找树|二叉搜索树

  • 基本概念:二叉查找树支持动态数据结合的快速插入、删除和查找

    • 散列表可以实现O(1)的查找,为什么不用散列表
  • 特点:左子树的值小于节点,右子树的值大于节点

  • 相关操作

    • 查找操作

      • 取根节点,等于则返回
      • 小于在左子树递归查询
      • 大于在右子树递归查询
    • 插入操作

      • 插入元素比节点大,且节点右子树为空,则插入右节点位置
      • 插入元素比节点小,且节点左子树为空,则插入左节点位置
    • 删除操作(可以简单标记不可用)

      • 删除空 跳过
      • 删除叶子节点|自驾游一个子节点  直接删除,并替换子节点
      • 先将右子树的最小节点进行替换,然后删除该节点
  • 其他操作

    • 中序遍历二叉树可以输出有序数据序列,时间复杂度是O(n)

    • 重复二叉树查找

      • 将相同的值存储在一个节点上,并记录次数
      • 将相等的元素插入右子树
  • 时间复杂度分析

    • 时间复杂度 最坏情况,遍历树高log2n n退化成链表
    • 平衡的二叉树 插入、删除、查找操作的时间复杂度O(logn) 

总结

  • 二叉查找树比散列表的优势

    • o(n)获取有序数据
    • 散列表底层仍然是数组,存在扩容的情况
    • 散列表因哈希冲突的时间复杂度不稳定,二叉树查找是稳定的
    • \

\