第五章树与二叉树

1. 树的基本概念

  1. 树的性质
    (1)树的结点数n等于所有的结点的度数之和+1
    (2)度为m的树中第i层上至多有$ m^{i-1}$个结点
    (3)度为m具有n个结点的树的最大高度为n-m+1

  2. 二叉树与度为2的有序树的区别
    (1)度为2的树至少有3个结点,而二叉树可以为空
    (2)二叉树无论孩子是否有两个,均需要区分左右孩子,而度为2的有序树只有一个孩子的话,不需要区分左右孩子

  3. 满二叉树:一棵高度为h,且有\(2^{h}-1\)个结点的二叉树称为满二叉树

  4. 完全二叉树是指除了最后一层外,其他任何一层的节点数均达到最大值,且最后一层也只是在最右侧缺少节点

  5. 非空二叉树的叶结点数等于度为2的结点数加1,即n0 = n2 + 1

  6. 由二叉树的中序 + 先序/后序/层序可以唯一地确定一棵二叉树.需要注意的是,若只知道二叉树的先序序列和后序序列,则无法唯一确定一棵二叉树.

  7. 树的存储方式常见有:
    (1)双亲表示法:采用一组连续空间来存储每个结点,同时在每个结点中增设一个伪指针,指示其双亲结点在数组中的位置,根节点下标为0,其伪指针域为-1
    优点是可以很快得到每个结点的双亲结点,但求结点的孩子时需要遍历整个结构
    (2)孩子表示法:将每个结点的孩子结点视为一个线性表,且以单链表作为存储结构,则n个结点就有n个孩子链表
    与双亲表示法相反,孩子表示法寻找双亲的操作需要遍历n个结点中孩子链表指针域所指向的n个孩子链表
    (3)孩子兄弟表示法(二叉树表示法):
    以二叉链表作为树的存储结构.孩子兄弟表示法使每个结点包括三部分内容:结点值,指向结点第一个孩子结点的指针,以及指向结点下一个兄弟结点的指针(沿着此域可以找到结点的所有兄弟结点)
    孩子兄弟表示法比较灵活,最大的优点是可以方便地实现树转换为二叉树的操作,易于查找孩子的结点等,但缺点是从当前结点查找双亲结点比较麻烦,若为每一个结点增设一个parent域指向其父节点,则查找也较为方便

  8. 二叉排序树和平衡二叉树的区别
    (1)二叉排序树:左子树上所有结点的关键字均小于根节点的关键字,右子树上所有结点的关键字均大于根结点的关键字,并且左右子树又各是一棵二叉排序树
    (2)平衡二叉树:左子树和右子树的深度之差不超过1

2. 线索二叉树

  1. 引入线索二叉树是为了加快查找结点前驱和后继的速度

3. 平衡二叉树

3.1 平衡二叉树旋转机制

  1. 规则一:左旋, 规则二右旋
  2. 触发时机: 当添加一个节点后, 该树不再是一颗平衡二叉树

1. 左旋(从左往右旋)

image
image
image
image

2. 右旋(从右往左旋)

image
image
image
image

3.3 平衡二叉树需要旋转的四种情况

1. 左左

  • 一次右旋
    image
    image
    image

2. 左右

  • 一次局部左旋, 一次整体右旋
    image
    image

image

3. 右右

  • 一次左旋
    image
    image

4. 右左

  • 一次局部右旋, 一次整体左旋
    image
    image
    image

4. 红黑树

4.1 红黑树定义

  1. 红黑树是一种特殊的二叉查找树, 每一个节点上都有一个存储位表示结点的颜色
  2. 每一个结点是红或者黑, 红黑树不是高度平衡的, 它的平衡是通过红黑规则来实现的

4.2 红黑树规则

  1. 每一个节点是红色, 或者是黑色的
  2. 根节点必须是黑色
  3. 如果一个节点没有子节点或父节点, 则该节点相应的指针属性值为Nil, 这些Nil视为叶节点, 每个叶节点是黑色的
  4. 不能出现两个红色节点相连的情况
  5. 任意节点到其所有后代叶节点的简单路径上, 均包含相同数目的黑色节点
    image

4.3 添加节点的规则

1b85474c6fbe77f9abb1dec79df07e9

5. 树和二叉树的应用

  1. 若没有一个编码是另一个编码的前缀,则称这样的编码为前缀编码

  2. 哈夫曼树与哈夫曼编码的作用是什么?
    (1)哈夫曼树:带权路径长度WPL最小的二叉树
    (2)哈夫曼树的作用:用来实现哈夫曼编码,以及后续的解码,用来压缩网络传输的文件

posted @ 2025-07-29 23:29  awei040519  阅读(15)  评论(0)    收藏  举报