博客
关于我
B树,B+树,树,二叉树,满二叉树,完全二叉树,二叉搜索树,平衡二叉树,
阅读量:623 次
发布时间:2019-03-13

本文共 1284 字,大约阅读时间需要 4 分钟。

树(Tree)

树是一种数据结构,包含n(n≥0)个结点的有限集,具有以下特点:

  • 每个元素称为结点(Node)。
  • 有一个特定的结点被称为根结点(Root)。
  • 除根结点外的其他元素被分为m(m≥0)个互不相交的集合,每个集合本身也是一棵树,被称为子树(Subtree)。
  • 树可以看作是层次化的结构,根结点在最上一层,其子节点占据下一层,依此类推。每个结点可以有任意多个子节点,但只能有一个父节点。


    树的度(Degree)

    度被定义为两种方式:

  • 节点的度:每个结点拥有的子树数或后继结点数。
  • 树的度:树中所有结点的度的最大值。
  • 例如,图中结点C的度为3,结点B的度为2,整棵树的度为3。


    树的基本概念

  • 分支节点(Internal Node)和叶子节点(Leaf Node):

    • 分支节点度大于0。
    • 叶子节点度为0。
  • 孩子节点(Child Node)和双亲结点(Parent Node):

    • 子节点由父节点和父节点的子树根决定。
    • 兄弟节点由同一父节点的多个子节点构成。
  • 层数和树的深度(Depth):

    • 树的深度是指从根节点到最深叶子节点的层数。
  • 有序树(Ordered Tree)和无序树(Unordered Tree):

    • 有序树的子树按一定顺序排列,结构如图所示。

  • 二叉树(Binary Tree)

    二叉树是树的扩展,定义为:

    • 包含n(n≥0)个结点的有限集合。
    • 由一个根节点和两棵互不相交的左子树和右子树构成。

    二叉树的特点

  • 每个节点最多有两个子树。
  • 二叉树是有序的。
  • 二叉树的种类

  • 满二叉树(Full Binary Tree):

    • 所有节点都有两个子树,叶子节点集中在同一层。
  • 完全二叉树(Complete Binary Tree):

    • 满足满二叉树的条件但结构不一定相同。
  • 平衡二叉树(AVL Tree):

    • 高度平衡,任何根节点的左子树和右子树高度差不超过1。
  • 红黑树(Red-Black Tree):

    • 自平衡二叉查找树,通过颜色属性(红色或黑色)实现平衡。

  • B树(B-Tree)

    B树是多路平衡查找树,用于存储和检索数据,支持O(log n)时间复杂度的查找、插入和删除。

    B树的定义(m阶B树)

  • 每个结点至多有m个子树。
  • 非叶节点至少有两个子树。
  • 非根节点至少有ceil(m/2)个子树。
  • 叶子节点位于同一层,结构如图所示。
  • B树的优势

    • 高效分页,减少磁盘I/O操作。
    • 适合存储大量数据,如数据库和文件系统。

    B+树(B+ Tree)

    B+树是B树的变体,用于范围查询,特点:

    • 非叶节点不存储值,只存储索引。
    • 叶子节点通过链连接,支持批量读取。

    B+树与B树的区别

  • B+树内部节点不存储值,唯一叶子节点处保留一部分值。
  • 树的高度更矮,更适合范围查询。
  • B+树的优势

    • 缺少磁盘I/O次数。
    • 适合范围查询和全序遍历。

    数据库中的选择

    • B+树在数据库中广泛应用,因为其支持快速范围查询和全数据遍历。
    • B树适合随机访问和插入操作。

    总结

    树数据结构为计算机科学提供了基础框架,二叉树和B/B+树是其重要的扩展,广泛应用于数据库和文件系统中。理解这些结构是掌握数据管理基础的关键。

    转载地址:http://lhiaz.baihongyu.com/

    你可能感兴趣的文章
    PYTHON--欧拉习题二
    查看>>
    python--高级应用总结
    查看>>
    python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
    查看>>
    Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
    查看>>
    Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
    查看>>
    Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
    查看>>
    python出现 unknown encoding: idna 的处理方法
    查看>>
    Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
    查看>>
    Python-numpy(2)数组的操作
    查看>>
    Python-Numpy的tile函数用法
    查看>>
    python-open函数
    查看>>
    Python-Pandas-将特定函数应用于给定级别-多索引数据框架
    查看>>
    python-queue队列通信
    查看>>
    python-ros No module named PyKDL
    查看>>
    python-social-auth 是否需要会话
    查看>>
    Python再获年度编程语言,微软或成最大赢家
    查看>>
    python-week5
    查看>>
    Python写表情包搜索工具(非常详细)零基础入门到精通,收藏这一篇就够了
    查看>>
    Python-【1】配置
    查看>>
    Python-从子文件夹执行绝对导入
    查看>>