博客
关于我
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/

    你可能感兴趣的文章
    Nginx配置ssl实现https
    查看>>
    Nginx配置TCP代理指南
    查看>>
    Nginx配置——不记录指定文件类型日志
    查看>>
    Nginx配置代理解决本地html进行ajax请求接口跨域问题
    查看>>
    Nginx配置参数中文说明
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    NHibernate学习[1]
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>