这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
考研倒计时:52天
参考资料: 王道数据结构考研复习指导 天勤数据结构高分笔记
上篇总结了树的基本概念和计算、二叉树的遍历和线索二叉树的内容。
本篇总结树和森林、以及应用(二叉排序树、平衡二叉树、哈夫曼树)的内容。
树和森林
要熟悉二叉树、树和森林之间的相互转换过程。图片来源wangwenji
(1)树转为二叉树
加线--去线--调整
(2)森林转换为二叉树
每个树转为二叉树--再连接起来
(3)二叉树转换为树
加线--去线--调整
(4)二叉树转换为森林
如果二叉树的根节点有右孩子,那么这棵二叉树能够转换为森林,否则将转换为一棵树。
从根结点开始,与右孩子连接的线去掉--再将分离的二叉树分别转为树
习题
【2014年408】
点击查看答案
可以通过上述森林转二叉树的例子看到叶节点个数等于没有左孩子的结点个数。选C除了以上三者转换的内容,还需要注意的是树和森林的遍历。
- 先根遍历。 若树不为空,先访问根结点,再依次遍历根结点的每棵子树。
其遍历序列与这棵树相应的二叉树的先序序列相同。
- 后根遍历
若树不为空,先依次遍历根结点的每棵子树,再访问根结点。
其遍历序列和这棵树相应的二叉树的中序序列相同。
- 树也有层次遍历,与二叉树的层次遍历思想基本相同。
森林也有两种遍历方式,森林的先序和中序遍历即对应二叉树的先序遍历和中序遍历。
部分教材会把森林的中序遍历称为后根遍历。
树 | 森林 | 二叉树 |
---|---|---|
先根遍历 | 先序遍历 | 先序遍历 |
后根遍历 | 中序遍历 | 中序遍历 |
应用
新增考点并查集后续单独补充总结。
二叉排序树(BST)
查找和插入的操作比较简单
沿着根结点,左小右大的策略进行查找或者插入操作。
需要注意的是删除操作
- 如果被删的是叶节点,直接删除,不会破坏二叉树的性质。
- 如果被删结点z只有一棵左子树或右子树,则让z的子树成为z父节点的子树。
- 如果被删结点z有左右两棵子树,用z的直接后继(直接前驱)代替z。
二叉树的查找效率取决于树高。
二分查找的判定树唯一,而二叉排序树的查找不唯一。
平衡二叉树
需要熟悉四种调整操作:
- LL(右单旋转)
- RR(左单旋转)
- LR(先左旋后右旋)
- RL(先右旋再左旋)
其他注意的tip: 含有n个结点的平衡二叉树的最大深度为log2(n),因此平均查找长度为log2(n)。
哈夫曼树
会计算WPL,构造哈夫曼编码。
构造核心是每次选取两个权植最小的树作为新结点的左右子树。
习题
【2009年408】
点击查看答案
选B,此题送分。【2014年408】
点击查看答案
选D,110和1100有冲突。【2018年408】
点击查看答案
根据二叉排序树的特性,左小右大,选C。部分内容待补充完善~
如有误,请多指正!