【C语言】数据结构C语言版 实验6 树
/*
编写算法函数void levelorder(tree t)实现树的层次遍历。
*/
#include "tree.h"
void levelorder(tree t) /* t为指向树根结点的指针*/
{tree queue[100];int f,r,i; //f,r分别为队头和队尾指针tree p;f=0; r=1; queue[0]=t;while(f<r){p=queue[f] ;f++;printf("%c",p->data); //访问队头元素for(i=0;i<m;i++) //将刚被访问的元素的所有子女结点依次进队 {if(p->child[i]){queue[r]=p->child[i];r++;}}}
}int main(){tree t;printf("please input the preorder sequence of the tree:\n");t=createtree();printf("\nthe levelorder is:");levelorder(t);return 0;}
/*
假设树采用指针方式的孩子表示法表示,试编写一个非递归函数void PreOrder1(tree root),实现树的前序遍历算法。
*/
#include "tree.h"
void PreOrder1(tree root)
{tree stack[MAXLEN];int top=-1,i;while(top!=-1||root){if(root) //子树不为空{printf("%c",root->data);for(i=m-1;i>0;i--){if(root->child[i]!=NULL) //将不为空的子结点进栈stack[++top]=root->child[i];}root=root->child[0]; //从第一个子结点开始遍历}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;
}
/*假设树采用指针方式的孩子表示法表示,试编写一个非递归函数void PostOrder1(tree t),实现树的后序遍历算法。
*/
#include "tree.h"
int PostOrder1(tree root)
{tree treeStack[MAXLEN]; //待处理结点tree overStack[MAXLEN]; //已处理完的结点int top=-1,top1=-1,i;if(root)treeStack[++top]=root; //根结点进栈while(top!=-1){root=treeStack[top--]; //取一个待处理结点for(i=0;i<m;i++) //将root的所有子结点进栈{if(root->child[i])treeStack[++top]=root->child[i];}overStack[++top1]=root; //处理完root,将root入overStack}while(top1!=-1) //输出printf("%c",overStack[top1--]->data);
}
int main ()
{tree root;printf("please input the preorder sequence of the tree:\n");root =createtree();printf("后序序列是:\n");PostOrder1(root);return 0;
}
/*
假设树采用指针方式的孩子表示法表示,试编写一个函数int equal(tree t1, tree t2),
判断两棵给定的树是否等价(两棵树等价当且仅当其根结点的值相等且其对应的子树均相互等价)。
*/
#include "tree.h"
#define TRUE 1
#define FALSE 0
int equal(tree t1,tree t2)
{int flag=TRUE,i;if(!t1&&!t2) //若两树为空,则相等return TRUE;else if(!t1&&t2||t1&&!t2) //若有一树为空,则不相等return FALSE;else if(t1->data!=t2->data)return FALSE;else{for(i=0;i<m;i++){if(t1->child[i]==t2->child[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;
}
/*
假设树采用指针方式的孩子表示法存储结构,试编写一个函数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])
{tree stack[MAXLEN],parent=NULL,child=NULL;int n=0,top=0,done=0,i;while(done==0&&s[n]!='\0') //未完成并且字符串不为空{if(s[n]=='(') //遇到左括号,则其前面的结点成为父结点{n++;parent=child;stack[top++]=parent; //将父结点进栈}else if(s[n]==')') //遇到右括号,父结点出栈{n++;parent=stack[--top];if(top==0) //若栈顶无元素,则结束done=1;elseparent=stack[top-1];//换下一个父结点收集子结点}else if(s[n]==',')n++;else{child=(tree)malloc(sizeof(node));child->data=s[n];for(i=0;i<m;i++)child->child[i]=NULL;if(parent!=NULL) //若父结点不为空,则将其挂到父结点上{for(i=0;i<m;i++)if(parent->child[i]==NULL){parent->child[i]=child;break;}}n++;}}return parent;
}
int main ()
{char s[MAXLEN];tree root = NULL;printf ("请用树的括号表示法输入一棵树:\n");scanf ("%s",s);root = Ct(s);preorder(root); /*前序遍历树*/return 0;
}
【C语言】数据结构C语言版 实验6 树相关推荐
- C语言数据结构【手抄版】第五章 树和二叉树【上篇】
注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 5.1.树的基本概念和术语 1.树的定义 2.树的表示法 3.基本术 ...
- 稀疏矩阵的三元组存储方法c语言,数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现...
陈独秀的秘密 数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现 P98 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月8日 */ typedef int ElemType; // ...
- C语言数据结构【手抄版】第三章 栈和队列
注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 注意:文中彩色代码均在Visual Studio 2022编译器中编 ...
- 字符串括号匹配c语言,数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法...
问题标题 数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法 2019-8-21来自ip:13.149.196.77的网友咨询 浏览量:270 手机版 问题补充 ...
- 串的堆分配存储c语言,数据结构c语言串的堆分配存储源程序
<数据结构c语言串的堆分配存储源程序>由会员分享,可在线阅读,更多相关<数据结构c语言串的堆分配存储源程序(7页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...
- 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc
数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...
- C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文
数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00 浏览量:763 手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...
- c语言程序设计第五版实验报告九,C语言程序设计实验报告-实验九.doc
C语言程序设计实验报告-实验九.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...
- C语言数据结构【手抄版】第五章 树和二叉树【尾篇】二叉树C实现
封装二叉树算法 字符串工具,规避了了数字类型字符串比较不准确的BUG,string.h: #pragma once #ifdef __cplusplus extern "C" { ...
最新文章
- python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com
- 配置hibernate手动配置
- 这家自动驾驶公司融资2.7亿美元,京东美团齐出手
- java 广义表_数据结构:广义表的实现(Java)
- 51Nod 1283 最小周长
- postgresql 备份_PostgreSQL的备份与恢复
- 将 gitblog 的博客内容搬迁到 CSDN
- Linux下汇编语言学习笔记13 ---
- 华为Mate 40 Pro+真机现身:外观实锤,价格近万!
- 首轮超巨诞生!利拉德轰50分送超远三分压哨绝杀 开拓者4-1淘汰雷霆
- html5 音乐转盘,HTML5 幸运大转盘
- windows 2003系列之搭建域环境
- python简单爬虫代码-一则python3的简单爬虫代码
- 查看SQLSERVER内部数据页面的小插件Internals Viewer
- ANT的环境搭建和开发
- 我要用生锈的机关枪击穿现在
- 小程序实现身份证取景框拍摄-uniapp版
- Hadoop系统中的单点故障解决方案总结
- 汉澳sinox载入ntfs硬盘,移动ntfs硬盘,u盘 并读写完全成功
- 小布老师oralce讲座笔记(六)