数据结构C语言版(李云清)实验6 树
实验6 树
1、编写算法函数void levelorder(tree t)实现树的层次遍历。
#include "tree.h"void levelorder(tree t) /* t为指向树根结点的指针*/
{tree queue[MAXLEN]; /*用队列存放待处理的结点*/int head=0,end=1;int i;queue[head] = t; /*先将根节点入队*/while( head < end ){for(i=0;i<m;i++) /*将队列中结点的下一层结点入队,逐层入队*/{if( queue[head]->child[i] ){queue[end++] = queue[head]->child[i];}}printf("%c",queue[head++]->data); /*逐层出队*/}}int main(){tree t;printf("please input the preorder sequence of the tree:\n");t=createtree();printf("\nthe levelorder is:");levelorder(t);return 0;}
2、假设树采用指针方式的孩子表示法表示,试编写一个非递归函数void PreOrder1(tree root),实现树的前序遍历算法。
#include "tree.h"
void PreOrder1(tree root)
{tree stack[100];int i;int top=-1;while (root || top!=-1){if (root){printf("%c",root->data); //输出根结点for (i=m-1;i>0;i--) //所有非空孩子结点进栈if (root->child[i]!=NULL){top++;stack[top]=root->child[i];}root=root->child[0]; //转第1棵子树}else{root=stack[top--]; //栈顶树出栈}}}
int main ()
{tree root;printf("please input the preorder sequence of the tree:\n");root =createtree();printf("前序序列是:\n");PreOrder1(root);return 0;
}
3、 假设树采用指针方式的孩子表示法表示,试编写一个非递归函数void PostOrder1(tree t),实现树的后序遍历算法。
#include "tree.h"
int PostOrder1(tree root)
{tree treeStack[MAXLEN]; /*储存待处理的结点*/int top = -1;tree printStack[MAXLEN]; /*储存已经处理完子树的、待输出的结点*/int topp = -1;int i;if( root ) treeStack[++top] = root; /*根结点进栈*/while( top != -1 ){root = treeStack[top--]; /*取一个待处理结点root*/for(i=0;i<m;i++) /*将root的所有子结点进栈*/{if( root->child[i] ) treeStack[++top] = root->child[i];}printStack[++topp] = root; /*处理完root、将root进printStack*/}while( topp != -1 ) printf("%c",printStack[topp--]->data); /*输出后序序列*/
}
int PostOrder2(tree root)
{tree treeStack[MAXLEN]; /*未处理完的结点*/int subStack[MAXLEN]; /*正在处理的孩子的下标*/int top = -1;tree p;int i;treeStack[++top] = root;subStack[top] = 0; /*首先处理child[0]这个分支*/while( top != -1 ){p = treeStack[top];while( subStack[top] < m ) /*处理所有分支*/{i = subStack[top];if( p->child[i] ){p = p->child[i];treeStack[++top] = p; /*有孩子则入栈*/subStack[top] = 0; /*并处理刚入栈结点的child[0]*/}else {subStack[top]++; /*该分支没有孩子,处理下一分支*/}}printf("%c",p->data); /*出栈前再输出*/top--; /*该结点处理完毕,返回处理父结点的child[i+1]*/subStack[top]++;}
}
int main ()
{ //AB###CE###FH###I####G###D### ,测试三度树tree root;printf("please input the preorder sequence of the tree:\n");root =createtree();printf("后序序列是:\n");PostOrder1(root);putchar('\n');PostOrder2(root);return 0;
}
4、假设树采用指针方式的孩子表示法表示,试编写一个函数int equal(tree t1, tree t2),判断两棵给定的树是否等价(两棵树等价当且仅当其根结点的值相等且其对应的子树均相互等价)。
#include "tree.h"
#define TRUE 1
#define FALSE 0int equal(tree t1,tree t2)
{int flag=TRUE,i;if (t1==NULL && t2==NULL)return TRUE;elseif (t1==NULL && t2!=NULL || t2==NULL && t1!=NULL)return FALSE;elseif (t1->data!=t2->data) return FALSE;else{for (i=0;i<m;i++)flag=flag&&equal(t1->child[i],t2->child[i]);return flag;}}int main ()
{tree t1,t2;printf("please input the preorder sequence of the tree:\n");t1=createtree();getchar();printf("please input the preorder sequence of the tree:\n");t2=createtree();if ( equal(t1,t2) == TRUE){printf ("两树相等\n");}else{printf ("两树不相等\n");}return 0;
}
5、假设树采用指针方式的孩子表示法存储结构,试编写一个函数tree Ct(char s[]),根据输入的树的括号表示字符串s,生成树的存储结构。例如,若要建立教材图6.4所示的树,应输入A(B(E,F),C,D(G(I,J,K),H))。(说明,tree.h中定义的常量m表示树的最大度,请根据建树的需要自行修改m的值)
#include "tree.h"
/*请将本函数补充完整,并进行测试*/
tree Ct(char s[MAXLEN])
{int length;int i,j,top;tree stack[100],root=NULL,temp = NULL,n;int childSeq[m]; // 其第几个孩子top = -1;length = strlen (s);for (i = 0;i < length;i++){if (s[i] == ','){continue;}else if (s[i] == '('){stack[++top] = temp;childSeq[top] = 0;}else if (s[i] == ')'){top--;}else if (top != -1){n = (tree)malloc (sizeof (node));n->data= s[i];for (j = 0;j < m;j++){n->child[j] = NULL;}temp = n;stack[top]->child[childSeq[top]++] = temp;}else{root = (tree)malloc (sizeof (node));root->data = s[i];for (j = 0;j < m;j++){root->child[j] = NULL;}temp = root;}}return root;
}int main ()
{char s[MAXLEN];tree root = NULL;printf ("请用树的括号表示法输入一棵树:\n");scanf ("%s",s);root = Ct(s);preorder(root); /*前序遍历树*/return 0;
}
数据结构C语言版(李云清)实验6 树相关推荐
- 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc
数据结构(C语言版第2版_李云清)习题答案2012-12.doc 第 1 章 绪论 1.1 什么是数据结构? [答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储 于计算 ...
- 数据结构c语言版实验报告2,数据结构(C语言版) 实验报告 (2)
<数据结构(C语言版) 实验报告 (2)>由会员分享,可在线阅读,更多相关<数据结构(C语言版) 实验报告 (2)(15页珍藏版)>请在人人文库网上搜索. 1.数据结构(C语言 ...
- 【数据结构C语言版】课程实验-图的应用
数据结构C语言版 - 图的应用 前言: 大二本科计算机科学与技术程序员一枚,总结几篇课后实验内容,希望可以帮助到大家. 软件:Devc++ 实验目的: 通过实验掌握图的基本存储原理,能够利用图模型存储 ...
- 数据结构c语言版第三版实验四答案,数据结构(C语言版)第三四章习题答案
Push( &s, t[i]); while( !EmptyStack( &s)) {// 每弹出一个字符与相应字符比较 temp=Pop (&s); if( temp!=S[ ...
- 数据结构c语言版习题
数据结构c语言版习题 文章目录 第一章 绪论 第二章 线性表 第四章 串 第五章数组和广义表作业 第六章 树与二叉树理论作业 第七章图作业 第八章查找作业 第一章 绪论 一.选择题 1.以下说法正确的 ...
- 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置
<(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...
- 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现
<数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...
- 数据结构c语言版朱战立报告,数据结构(C语言版)
本书是Sedgewick彻底修订和重写的C算法系列的第一本.全书分为四部分,共16章.第一部分"基础知识"(第1-2章)介绍基本算法分析原理.第二部分"数据结构" ...
- c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf
数据结构( C语言版) (第2版) 课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 14 第 4 章 串.数组和广义表 27 第 5 章 ...
- 数据结构c语言邓红卫答案,数据结构(C语言版)
辽宁省"十二五"普通高等教育本科省级规划教材. 数据结构学习与实验指导(C语言版)(普通高校本科计算机专业特色教材精选·算法与程序设计) ¥30.00定价:¥30.00 /2012 ...
最新文章
- HiCar基本功能介绍
- windows系统安装airflow模块(一)
- 想学Python?那这套教程再适合不过了!
- 数据结构实验4:C++实现循环队列
- php 导出csv文件
- android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案
- Mybatis源码阅读(四):核心接口4.1——StatementHandler
- 爬虫实例6 爬取联英人才网147页招聘信息,并导入数据库
- 天联无法ping通服务器地址_金万维天联标准版无法连接,怎么办?
- autocad html 插件,cad插件有哪些
- PHP(阿里云短信验证码)
- 树莓派笔记5:自制小车(简单避障)
- html5广告具有什么特性,最快认知什么才是HTML5广告!
- 云计算技术 - 基础环境搭建
- [android] 运行编译报错:Entry name ‘assets/Icoxx.png‘ collided
- mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)
- SQL server更改表的架构名称——修改表名前缀为[dbo]
- 单调函数有界性类题目解法
- HP Z840 安装Ubuntu18.04,gpu版的tensorflow,keras全程纪要,硬件Qurado P4000两块
- Java笔记09——常用类
热门文章
- 《我不想与我不能》 ——刘未鹏
- UVa1586 Molar Mass
- 经典力学学习(运动学)——质点运动学
- 几款步进电机驱动IC
- 存储过程中CreateParameter的参数说明
- WinX.DVD.Ripper.Platinum.v5.8.3.WinALL.Regged-BLiZZARD
- LeetCode 297 Serialize and Deserialize Binary Tree
- MSN:小绿人的雄心
- 第十七届全国大学智能汽车竞赛全国总决赛名单
- 走遍欧洲 —— 东欧、南斯拉夫