数据结构 树

术语

  • 孩子
  • 叶子:数中没有孩子的元素
  • 级:元素的级别 = 父母级别 + 1, 树根的级为1
  • 树的高度:树的级数
  • 元素的度:孩子数
  • 树的度: 元素度最大值

二叉树

  • 二叉树可以为空,普通树不可以。
  • 二叉树每个元素最多有两个元素
  • 二叉树,左右元素是有序的,可以区分,其他树的字数之间是无序的。

二叉树的特性

  1. 有n个元素的二叉树,有n-1条边
  2. 二叉树高度为h,最多有 2 h − 1 2^h -1 2h1个元素,第 i 层有 2 i − 1 2^{i-1} 2i1个元素
  3. 有n个元素的二叉树最高为 n ,最小为 ⌈ ( l o g 2 ( n + 1 ) ) ⌉ \left \lceil (log_2(n+1))\right \rceil (log2(n+1))
  4. 二叉树中度为 0 的元素数 = 度为 2 元素数 + 1

满二叉树

各层都满,可以对 1 到 2 h − 1 2^h-1 2h1 进行标号

完全二叉树

  • 前h-1 层为满二叉树
  • 第h层,连续排于第h层左端

完全二叉树高度 ⌈ ( l o g 2 ( n + 1 ) ) ⌉ \left \lceil (log_2(n+1))\right \rceil (log2(n+1))

二叉树的数组描述

  • 完全二叉树,从上到下从左到右
  • 编号从1开始,父节点是 i ,左右孩子分别在 2i 、2i+1
    在这里插入图片描述
  • 二叉树可以看作是缺少了部分元素的完全二叉树

在这里插入图片描述
右斜的二叉树存储空间最大

二叉树链表描述

在这里插入图片描述

二叉树的遍历方法

  • 前序遍历: 访问根元素、遍历左子树、遍历右子树
  • 中序遍历: 遍历左子树、访问根节点、遍历右子树
  • 后序遍历:遍历左子树、遍历右子树、访问根节点
  • 层次比哪里: 从上往下逐层,从左到右的次序访问元素

前序序列和中序序列 或者由后序序列和中序序列能为一确定一棵二叉树

中序序列区分左右子树,前序、后序确定元素顺序。

树和森林的二叉树表示

树的二叉树表示:

在这里插入图片描述

在这里插入图片描述

二叉树的模拟指针表示

在这里插入图片描述
树的父母表示方法:
在这里插入图片描述
树的孩子表示法:

在这里插入图片描述

前序遍历的非递归实现

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

线索化二叉树

  • 通过二叉树的遍历,将二叉树所有元素排列在一个线性序列中,可以找到某元素的前驱和后继

在这里插入图片描述

m叉树

m叉搜索树

特征:

  • 每个内部节点最多有m个子女,1~m-1个元素
  • 每个含 p个元素的节点,有 p+1 个子女
  • 节点内 元素关键字,子树关键字有序排列。
删除

-左右子树都为空,直接删除

  • 相邻子树一个不空,从不空的相邻子树中找一个元素替换被删除的元素
  • 删除元素相邻子树都不控,从不空的相邻子树中找一个元素替换被删除的元素

m阶B 树

特征:

  • 根节点至少两个孩子
  • 出了根节点,所有内部节点至少 ⌈ m / 2 ⌉ \left \lceil m/2 \right \rceil m/2 个孩子, ⌈ m / 2 ⌉ − 1 \left \lceil m/2 \right \rceil - 1 m/21 个元素
  • 所有外部节点都位于同一层

在这里插入图片描述
在这里插入图片描述

插入
  • 当新元素插入到饱和节点时,饱和节点需要被分裂
  • 节点从 ed 处分裂此节点, d= ⌈ m / 2 ⌉ \left \lceil m/2 \right \rceil m/2
    在这里插入图片描述
删除
  • 1 被删除元素的孩子均在外部节点中(元素在树叶中);被删除元素所在的节点有多余最少数目的元素
    直接删除就好了

  • 2 被删除元素的孩子均在外部节点中(元素在树叶中);被删除元素所在的节点元素数目为最小值
    (1) 最邻近的兄弟有多余元素,替换到父节点中,将父节点中的元素换下来
    (2) 最临近的兄弟有最少数目元素,将两兄弟和兄弟之间的元素合并成一个节点

  • 3 当被删除的元素在非树叶节点中,可以用左相邻子树的最大元素,也可以用右相邻子树的最小元素替换被删除的元素。 使得转成上两种情况

B+ 树

在这里插入图片描述
在这里插入图片描述

  • 既可以顺序查找,又可以随即查找
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值