首页 > 其他分享 >二叉树、平衡二叉树、红黑树、B树、B+树

二叉树、平衡二叉树、红黑树、B树、B+树

时间:2022-11-07 10:45:50浏览次数:52  
标签:二叉 查找 二叉树 红黑树 平衡 节点

  • 二叉树
    • 基于二叉查找树的这种特点,在查找某个节点的时候,可以采取类似于二分查找的思想,快速找到某个节点。n 个节点的二叉查找树,正常的情况下,查找的时间复杂度为 O(logN)。
    •  

       

    • 二叉搜索树一定程度上可以提高搜索效率,但是当原序列有序时,例如序列 A = {1,2,3,4,5,6},构造二叉搜索树如图 1.1。依据此序列构造的二叉搜索树为右斜树,同时二叉树退化成单链表,搜索效率降低为 O(n)。

      在此二叉搜索树中查找元素 6 需要查找 6 次。

  • 平衡二叉树
    • 平衡二叉树是基于二分法的策略提高数据的查找速度的二叉树的数据结构。平衡二叉树是采用二分法思维把数据按规则组装成一个树形结构的数据,用这个树形结构的数据减少无关数据的检索,大大的提升了数据检索的速度。定义如下:

      • 可以是空树。
      • 假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1。
    • 问题:
      • 为什么有了平衡树还需要红黑树?
         虽然平衡树解决了二叉查找树退化为近似链表的缺点,能够把查找时间控制在 O(logn),不过却不是最佳的,因为平衡树要求每个节点的左子树和右子树的高度差至多等于1,这个要求实在是太严了,导致每次进行插入/删除节点的时候,几乎都会破坏平衡树的第二个规则,进而都需要通过左旋和右旋来进行调整,使之再次成为一颗符合要求的平衡树。
    • 例子
    •  

       

  • 红黑树
    • 显然,如果在插入、删除很频繁的场景中,平衡树需要频繁调整,这会使平衡树的性能大打折扣,为了解决这个问题,于是有了红黑树,红黑树具有如下特点:

      • 每个节点或者是黑色,或者是红色。
      • 根节点是黑色。
      • 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点]
      • 如果一个节点是红色的,则它的子节点必须是黑色的。
      • 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径]
    • 包含n个内部节点的红黑树的高度是 O(log(n))。如图:



    • 3、红黑树的使用场景
      java中使用到红黑树的有TreeSet和JDK1.8的HashMap。红黑树的插入和删除都要满足以上5个特性,操作非常复杂,为什么要使用红黑树?
    • 原因:
      红黑树是一种平衡树,复杂的定义和规则都是为了保证树的平衡性。
  • B树
  • B+树

标签:二叉,查找,二叉树,红黑树,平衡,节点
From: https://www.cnblogs.com/wxdlut/p/16865160.html

相关文章

  • 根据前序遍历和中序遍历构造二叉树
    对于一个二叉树,如果我们我们知道他的前序遍历和中序遍历,那就可以直接构造还原出完整的二叉树。举例:现在有一个二叉树,前序遍历是ABDECFG,中序遍历是DBEACGF。如何确定这个树......
  • 297. 二叉树的序列化与反序列化
    序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得......
  • 不知道为什么递归失败 二叉树 演我?
    不知道为什么不能够递归搞明白了再更啊哈哈哈怎么突然就行了准备截一张失败的图来着然后突然就出来了也不知道之前为什么失败  非递归的今天晚上应该写不出来了......
  • #yyds干货盘点# LeetCode 腾讯精选练习 50 题:二叉树中的最大路径和
    题目:路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节......
  • 二叉树中查找后继节点问题
    二叉树中查找后继节点问题作者:Grey原文地址:博客园:二叉树中查找后继节点问题CSDN:二叉树中查找后继节点问题题目描述给定一个二叉查找树,以及一个节点,求该节点在中序遍......
  • 35+,如果面试让我手写红黑树!
    一、前言:挂在树上!不知道你经历过HashMap的夺命连环问!为啥,面试官那么喜欢让你聊聊HashMap?因为HashMap涉及的东西广,用到的数据结构多,问题延展性好,一个HashMap就能聊下......
  • 236. 二叉树的最近公共祖先
    给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q......
  • 114. 二叉树展开为链表
    给你二叉树的根结点 root ,请你将它展开为一个单链表:展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展......
  • 二叉树的最大宽度系列问题
    二叉树的最大宽度系列问题作者:Grey原文地址:博客园:二叉树的最大宽度系列问题CSDN:二叉树的最大宽度系列问题求树的最大宽度题目描述给你一棵二叉树的根节点root,返......
  • 105. 从前序与中序遍历序列构造二叉树
    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:  输入:pre......