2585 - 数据结构/二叉树/创建与遍历(软件1、2)
时间限制 : 1 秒
内存限制 : 8 MB
<span style="font-size:9pt;">实验原理:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 二叉树是最重要的一类树型结构,而二叉链表是二叉树的一种比较直观和灵活的存储结构。在二叉链表中的每个结点由三部分组成:左孩子指针、右孩子指针和结点数据。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 其中左右孩子指针分别指向本结点的左右孩子结点,如果一个结点的左右孩子不存在,则对应的指针记录为空值,</span><span style="font-family:Tahoma;font-size:9pt;">C</span><span style="font-size:9pt;">语言用</span><span style="font-family:Tahoma;font-size:9pt;">NULL</span><span style="font-size:9pt;">表示,画图时用</span><span style="font-family:Tahoma;font-size:9pt;">^</span><span style="font-size:9pt;">表示。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 结点数据的数据类型应该根据实际应用进行选择,在本次实验中,选用字符类型。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-family:Tahoma;font-size:9pt;"> </span>
<span style="font-size:9pt;"> 输入创建原理:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 创建二叉树可以用递归方式进行,下面用伪代码来描述创建流程:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 1、结点</span><span style="font-family:Tahoma;font-size:9pt;">* </span><span style="font-size:9pt;">创建结点函数</span><span style="font-family:Tahoma;font-size:9pt;">(){</span>
<span style="font-family:Tahoma;font-size:9pt;"> </span><span style="font-size:9pt;">定义结点数据</span><span style="font-family:Tahoma;font-size:9pt;">;</span>
<span style="font-size:9pt;"> 输入结点数据</span><span style="font-family:Tahoma;font-size:9pt;">;</span>
<span style="font-size:9pt;"> 如果 结点数据为空 则返回</span><span style="font-family:Tahoma;font-size:9pt;">NULL;//</span><span style="font-size:9pt;">规定输入字符</span><span style="font-family:Tahoma;font-size:9pt;">^</span><span style="font-size:9pt;">表示本结点不创建</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 创建结点</span><span style="font-family:Tahoma;font-size:9pt;">* node;</span>
<span style="font-size:9pt;"> 赋值</span><span style="font-family:Tahoma;font-size:9pt;">node</span><span style="font-size:9pt;">的数据为刚刚输入的结点数据</span><span style="font-family:Tahoma;font-size:9pt;">;</span>
<span style="font-size:9pt;"> </span><span style="font-family:Tahoma;font-size:9pt;">node.</span><span style="font-size:9pt;">左孩子</span><span style="font-family:Tahoma;font-size:9pt;">=</span><span style="font-size:9pt;">创建结点函数</span><span style="font-family:Tahoma;font-size:9pt;">();</span>
<span style="font-size:9pt;"> </span><span style="font-family:Tahoma;font-size:9pt;">node.</span><span style="font-size:9pt;">右孩子</span><span style="font-family:Tahoma;font-size:9pt;">=</span><span style="font-size:9pt;">创建结点函数</span><span style="font-family:Tahoma;font-size:9pt;">();</span>
<span style="font-size:9pt;"> 返回</span><span style="font-family:Tahoma;font-size:9pt;"> node;</span>
<span style="font-family:Tahoma;font-size:9pt;"> }</span>
<span style="font-size:9pt;"> 2、在需要创建整棵二叉树的地方写上:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 二叉树根结点 = 创建结点函数</span><span style="font-family:Tahoma;font-size:9pt;">()</span><span style="font-size:9pt;">;</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-family:Tahoma;font-size:9pt;"> </span><span style="font-size:9pt;"> </span><span style="font-family:Tahoma;font-size:9pt;"> </span><span style="font-size:9pt;">遍历原理:要自己描述先序遍历、中序遍历原理。</span>
<span style="font-family:Tahoma;font-size:9pt;"> </span>
<span style="font-size:9pt;">实验步骤:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 1、定义二叉链表结点类型;</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 2、实现二叉链表创建方法;</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 3、实现二叉链表的先序、中序遍历方法;</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;"> 4、实现主函数</span><span style="font-family:Tahoma;font-size:9pt;"></span>
题目输入
<span style="font-size:9pt;"><span style="font-family:Tahoma;font-size:9pt;">
<span style="font-size:9pt;">每行一棵非空的二叉树,每棵二叉树按先序遍历形式,空指针用字符</span><span style="font-family:Tahoma;font-size:9pt;">^</span><span style="font-size:9pt;">占位,如图的一棵二叉树。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;">如果读到一行的第一个字符就是</span><span style="font-family:Tahoma;font-size:9pt;">^</span><span style="font-size:9pt;">,表示没有更多输入了,程序退出。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;">测试时,每棵树不会超过</span><span style="font-family:Tahoma;font-size:9pt;">20</span><span style="font-size:9pt;">个结点。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-size:9pt;">输入是:</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span style="font-family:Tahoma;font-size:9pt;">AB^DE^^^C^^</span>
<span style="font-family:Tahoma;font-size:9pt;">^</span>
<span style="font-family:Tahoma;font-size:9pt;"><span style="font-family:Tahoma;font-size:9pt;"> <span style="font-family:Tahoma;font-size:9pt;"> </span></span></span></span></span><span style="font-family:Tahoma;font-size:9pt;"></span>
题目输出
<span style="font-size:9pt;">对于每个二叉树,分别进行先序遍历、中序遍历,每种遍历结果输出一行。</span><span style="font-family:Tahoma;font-size:9pt;"></span>
<span></span>
输入/输出样例
输入格式
DL^^R^^ AB^DE^^^C^^ ^
输出格式
DLR LDR ABDEC BEDAC