数据结构与算法分析-二叉树,树和森林

二叉树,树和森林

考试内容

二叉树、树和森林的定义

树:

树(Tree)是n(n>=0)个结点的有限集,它或为空树(n= 0); 或为非空树,对于非空树T:

  • 有且仅有一个称之为根的结点;
  • 除根结点以外的其余结点可分为m(m>0)个互不相交的有限集T1 , T2 , …,其中每
    一个集合本身又是一棵树, 并且称为根的子树。

二叉树:

二叉树(Binary Tree)是n(n>=0)个结点所构成的集合,它或为空树(n= 0); 或为非空树,对于非空树T:

  • 有且仅有一个称之为根的结点;
  • 除根结点以外的其余结点分为两个互不相交的子集T1和T2, 分别称为T的左子树和右子
    树,且T1和T2本身又都是二叉树。

二叉树和树的区别:

  • 二叉树每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点);
  • 二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的实现(包括顺序存储结构和链式存储结构)、二叉树的遍历;

顺序存储结构:

链式存储结构:

二叉树的遍历:
  • 前序遍历

若二叉树为空,则空操作;否则
(1)访问根结点;
(2)先序遍历左子树;
(3)先序遍历右子树。

  • 中序遍历

若二叉树为空,则空操作;否则
(1)中序遍历左子树;
(2)访问根结点;
(3)中序遍历右子树;

  • 后序遍历

若二叉树为空,则空操作;否则
(1)后序遍历左子树;
(2)后序遍历右子树;
(3)访问根结点

二叉树结构下的应用及扩展,例如二叉检索树、2-3-4 树、Huffman 编码以及堆
二叉检索树
2-3-4树
Huffman编码

哈夫曼(Huffman)树又称最优树,是一类带权路径长度最短的树

平衡二叉树的定义、平衡因子的定义以及平衡二叉树的旋转操作
平衡二叉树
平衡因子
平衡二叉树的旋转:
树和森林的存储结构、树和森林的遍历以及森林与二叉树的转换;
树和森林的储存结构
  • 双亲表示法

这种表示方法中, 以一组连续的存储单元存储树的结点,每个结点除了数据域data外,还附
设一个parent域用以指示其双亲结点的位置。

这种存储结构利用了每个结点(除根以外)只有唯一的双亲的性质。在这种存储结构下, 求
结点的双亲十分方便, 也很容易求树的根,但求结点的孩子时需要遍历整个结构

  • 孩子表示法

由于树中每个结点可能有多棵子树,则可用多重链表, 即每个结点有多个指针域, 其中每个
指针指向一棵子树的根结点

  • 孩子兄弟法

又称二叉树表示法,或二叉链表表示法,即以二叉链表做树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild 域和nextsibling域

这种存储结构的优点是它和二叉树的二叉链表表示完全一样, 便千将一般的树结构转换为二叉树进行处理, 利用二叉树的算法来实现对树的操作。因此孩子兄弟表示法是应用较为普遍的一种树的存储表示方法

森林与二叉树的转换:
  • 森林转换成二叉树

如果F={T1,T2,…,几}是森林,则可按如下规则转换成一棵二叉树B= (root, LB, RB)。
(1)若F为空,即m= o,'则B为空树;
(2)若F非空,即m"‘F-0, 则B的根root即为森林中第一棵树的根ROOT(T1 ); B的左子树
LB是从兀中根结点的子树森林F尸{T11, T12, …, T1m}转换而成的二叉树;其右子树RB是从森林
F’= {T2, T3 , …,几} 转换而成的二叉树

  • 二叉树转换成森林

如果B= (root, LB, RB)是一棵二叉树,则可按如下规则转换成森林F={T1,T2 , …,Tm}:
(1)若B为空,则F为空;
(2)若B非空,则F中第一棵树兀的根ROOT(T1 )即为二叉树B的根root; T1中根结点的子> 树森林F1是由B的左子树LB转换而成的森林;F中除T1之外其余树组成的森林F’={T2 ,T3 , …}是由B的右子树RB转换而成的森林。

树和森林的遍历

当以二叉树的儿子兄弟表示树时

树的先根遍历和后根遍历可借用二叉树的先序遍历和中序遍历的算法实现:

树的先根遍历==二叉树的先序遍历

树的后根遍历==二叉树的中序遍历

并查集抽象数据类型的定义以及实现;

考试要求

掌握二叉树、树和森林的定义以及它们之间的异同点
掌握二叉树的四种遍历,并具有能够依赖遍历完成对二叉树进行操作的能力
理解二叉树采用顺序存储结构和链式存储结构的差异性
掌握利用二叉树及其扩展下的检索技术
掌握 Huffman 编码、堆的实现及应用
理解平衡二叉树的意义
掌握平衡二叉树的旋转操作
掌握树、森林能够采用的各种存储方式的差异性
掌握树和森林与二叉树的转换
掌握树、森林在遍历方面和二叉树的不同以及相关性
理解并查集的意义,以及掌握并查集的基本操作的实现
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
1.实验目的 (1)掌握森林的孩子兄弟链表(二叉链表)表示方法。 (2)掌握二叉树的结构及算法之间的对应关系。 (3)掌握的两种遍历算法及其应用。 2.实验任务 设计、实现算法求解下列问题: (1)按先序、后序、层次遍历森林。 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (2)求森林的高度。 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (3)求森林结点总数。 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (4)求森林叶子结点数。 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (5)求森林的度。 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (6)先序输出结点值及其层次号。 例对图7-1所示森林,输出为:(A,1) (B,2) (E,3) (K,4) (F,3) (G,3) (C,2) (H,3) (I,3) (D,2) (J,3) (L,1) (M,2) (N,2) (O,1) (P,2) 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre (7)输出广义表表示的。 例对图7-1所示森林,输出为:A( B(E(K),F,G),C(H,I),D(J)), L(M,N), O(P) ) 实验测试数据基本要求: 第一组数据: tree11.tre 第二组数据: f20.tre 3.实验说明 (以下给出的森林创建方法仅供参考,实验者可自行设计其它创建方法) (1)森林)的创建 本实验提供的创建代码,创建二叉链表表示的森林)分为2个步骤,第一步:读取文本文件,创建双亲表示的森林);第二部:从双亲表示转换为二叉链表表示的森林)。 (2)森林)数据文件格式说明 数据文件主要包含三个部分:森林)标识;结点列表;父子结点对(边)。 ①标识行 Tree or Forest,以区别其它数据文件,这一行是非必须的。 ②结点列表 给出森林)中的所有结点,结点次序无关,只要列出所有结点即可。如图7-1所示的森林,结点列表可为: //下面为森林)的结点列表 A B C D E F G H I J K L M N O P。 ③父子结点对(边)信息 父子对信息严格按照父结点、子结点表示一对父子结点,父子对也次序无关,只要列出森林中所有父子对即可,例图7-1所示森林,所有父子对为: //以下为父子结点对(边)信息 A B A C A D B E B F B G C H C I D J E K L M L N O P (3)创建森林)包含文件说明 createTree.h,包括森林)的双亲存储、二叉链表存储的定义;从文件创建双亲表示的森林);从双亲表示的森林创建二叉链表表示的森林;其它辅助算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

996大师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值