文章目录

  • 1. 树的分类
  • 2. 二叉树
    • 2.1 AVL Tree
    • 2.2 R-B Tree
  • 3. 多叉树
    • 3.1 B-Tree
    • 3.2 B+Tree

1. 树的分类

根据树分支的数量限制,可以将树结构分为两类:

  • 二叉树:二叉树也就是一个节点最多只有两个子节点的树结构,比较有代表的如 红黑树
  • 多叉树:多叉树一个节点可以有多于两个的子节点,典型如 B树

根据树节点的有序性,可以将树结构分为另外两类:

  • 查找树:也可以叫搜索树,基本特征为任意一个节点所包含的键值,大于等于左孩子的键值,小于等于右孩子的键值
  • 无序树:节点的键值无特定大小关系

2. 二叉树

2.1 AVL Tree

AVL树是一种自平衡二叉查找树,其定义如下:

  1. 它的左子树和右子树都是AVL树
  2. 左子树和右子树的高度差不能超过 1

在AVL树中任何节点的两个子树的高度差最大为1,所以它也被称为高度平衡树。为了保证平衡,AVL树中的每个节点都有一个平衡因子(balance factor,用BF表示),它表示这个结点的左、右子树的高度差,即左子树高度减去右子树高度的结果值。AVL 树上所有结点的BF值只能是-1、0、1,如果二叉树上一个结点的BF绝对值大于1,则该二叉树就不是 AVL 树。

AVL 树增加和删除节点可能需要通过多次旋转操作使树结构重新达到平衡,故其增删效率较低,但平衡后降低树了的高度,提高了其搜索性能。

2.2 R-B Tree

红黑树(Red-Black Tree,简称R-B Tree),是一种特殊的二叉查找树,同时它只要求部分地达到平衡,任何不平衡都会在三次旋转之内解决,故其增删效率相对 AVL 树更高,查询效率则稍逊。

红黑树的每个节点上都有存储位表示节点的颜色,颜色是红(Red)或黑(Black),其特性如下:

  1. 每个节点或者是黑色,或者是红色
  2. 根节点是黑色
  3. 每个叶子节点是黑色
  4. 如果一个节点是红色的,则它的子节点必须是黑色的
  5. 从一个节点到其左右子树叶节点的所有路径上包含相同数目的黑节点

关于它的特性,需要注意的是:

  1. 特性(3) 中的叶子节点是只为空(NIL或null)的节点
  2. 特性(5) 确保没有一条路径会比其他路径长出俩倍。因而,红黑树是相对接近平衡的二叉树

红黑树的左旋操作如下,对一个 节点 x 的左旋操作需要保证 x 有右子节点 y,过程为将 x 作为旋转顶端,x向左移动到其左子节点位置,其右子节点 y 向上移动到 x 原来的位置

   /*** 对红黑树的节点(x)进行左旋转** 左旋示意图(对节点x进行左旋):*      px                              px*     /                               /*    x                               y*   /  \      --(左旋)----->        /  \              *  lx   y                          x   ry*     /   \                       / \*    ly   ry                     lx  ly***/

红黑树的右旋操作示意如下,其实就是和左旋相反

3. 多叉树

3.1 B-Tree

m 阶 B-Tree: m 为一个节点最大子节点个数,可参考 MySQL 索引原理

一个m 阶 B树是一个多叉平衡搜索树,其要么是一棵空树,要么是满足以下条件的树:

  1. 结点最多有m个分支
  2. 根结点最少有两个分支,非根非叶结点至少有ceil(m/2)个分支
  3. 结点内关键字递增排序
  4. 一个结点有n-1个关键字,则该结点有n个分支,将关键字一一隔开
  5. 结点中任何一个关键字,其左边分支上的结点值都小于这个关键字,右边分支的结点值都大于这个关键字
  6. 叶子结点处于同一层

3.2 B+Tree

B+ 树是应文件系统所需而产生的一种B树的变种,一颗 m 阶的B+树和 m 阶的B树的差异在于:

  1. 有n棵子树的结点中含有n个关键字
  2. 所有的叶子结点中包含了全部关键字的信息,及指向含这些关键字记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接
  3. 所有的内结点可以看成是索引部分,结点中仅含有其子树(根节点)中最大(或最小)关键字

数据结构 - 树的分类相关推荐

  1. 数据结构.树的分类 思维导图

    做一个关于树的目录: 慢慢补充好了..

  2. 设树采用孩子兄弟表示法存放.用类c语言设计算法计算树的高度.,(数据结构课程设计分类题目.doc...

    (数据结构课程设计分类题目 线性表 顺序表: 1.设有一元素为整数的线性表L=(a1,a2,a3,-,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左.右两部分,其 ...

  3. 数据结构 - 树、常用树分类

    目录 1.树的一些基本概念 2.常用树的分类 1).完全二叉树 2).满二叉树 3).堆(大顶堆.小顶堆) 4).二叉搜索树 5).平衡二叉树 6).平衡二叉搜索树 7).AVL树(自平衡二叉搜索树) ...

  4. 数据结构——树的理解路线(总)

    资料整理于:1.<啊哈!算法>.<大话数据结构> 2.http://www.cnblogs.com/cxiaojia/archive/2012/08/14/2637948.ht ...

  5. 【数据结构(C语言)】数据结构-树

    树 文章目录 树 一.基本概念 1.树的定义 2.树的节点 3.树的性质 4.基本操作 二.二叉树 1.二叉树的特点 2.特殊二叉树 3.性质 4.存储结构 (1)二叉链表 (2)三叉链表 5.线索化 ...

  6. 考研数据结构树——读书摘抄总结

    这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战 考研数据结构树--读书摘抄总结 树(Tree)是n(n≥0)个结点的有限集.n=0时称为空树.在任意一棵非空树中:(1)有且仅有一个特定的称 ...

  7. python tree结构_Python入门篇-数据结构树(tree)篇

    Python入门篇-数据结构树(tree)篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.树概述 1>.树的概念 非线性结构,每个元素可以有多个前躯和后继 树是n(n& ...

  8. js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)

    本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣​leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...

  9. [转]C#与数据结构--树论--平衡二叉树(AVL Tree)

    C#与数据结构--树论--平衡二叉树(AVL Tree) http://www.cnblogs.com/abatei/archive/2008/11/17/1335031.html 介绍 我们知道在二 ...

最新文章

  1. NextGEN Gallery ~ 最强WordPress相册插件
  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)重载模板和类型转换
  3. ”System.Configuration.ConfigurationSettings.AppSettings“ 已过时----解决方案
  4. Ajax设置自定义请求头的两种方法
  5. Vue、React 之间如何实现代码移植?
  6. 【转】在windows上安装VTK
  7. 英特尔:5G将释放云的潜力,为垂直行业带来巨大商机
  8. 配置 php_零基础建站如何配置PHP运行环境 几种服务器环境配置的选择和方法
  9. 四川信息职业技术学院2019考纲复习
  10. 零基础Python爬虫实现(百度贴吧)
  11. Python Flask 微信验证
  12. nginx安全漏洞(CVE-2021-23017)修复
  13. NOIP2018赛后总结
  14. Eclipse中使用search功能,搜索内容无法多窗口打开
  15. C语言全局变量限定范围,C语言范围规则
  16. 使用gdebi去解决安装deb包的时候软件依赖问题
  17. CAP原理与传统的ACID
  18. 京东再次传来裁员消息,IT行业又有什么波动呢!
  19. 计算机表格判断是否合格操作,关于一些刚开始接触计算机的基础知识(2)
  20. 利用PaddleOCR训练车牌识别模型

热门文章

  1. 静态网页制作教程 (转载)
  2. python curses_简单的Python的curses库使用教程
  3. ps2摇杆android图形编程,ROC-RK3308-CC开发实例总结--PS2 Joystick摇杆模块
  4. IT专家的十大热门领域
  5. css+div练手-工作室
  6. 多码头间运输数学模型
  7. html li是块级元素,li是行内元素吗?
  8. Ubuntu16.04 使用apt-get命令安装Mesos
  9. 图示扫描二维码登录原理
  10. The variable XXX is being used without being initialized?