/*
编写算法函数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 树相关推荐

  1. C语言数据结构【手抄版】第五章 树和二叉树【上篇】

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 5.1.树的基本概念和术语 1.树的定义 2.树的表示法 3.基本术 ...

  2. 稀疏矩阵的三元组存储方法c语言,数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现...

    陈独秀的秘密 数据结构C语言版 稀疏矩阵的三元组顺序表存储表示和实现 P98 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月8日 */ typedef int ElemType; // ...

  3. C语言数据结构【手抄版】第三章 栈和队列

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 注意:文中彩色代码均在Visual Studio 2022编译器中编 ...

  4. 字符串括号匹配c语言,数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法...

    问题标题 数据结构C语言括号的检验源程序 , 数据结构(C) 请用类C语言实现括号匹配的检验这个算法 2019-8-21来自ip:13.149.196.77的网友咨询 浏览量:270 手机版 问题补充 ...

  5. 串的堆分配存储c语言,数据结构c语言串的堆分配存储源程序

    <数据结构c语言串的堆分配存储源程序>由会员分享,可在线阅读,更多相关<数据结构c语言串的堆分配存储源程序(7页珍藏版)>请在人人文库网上搜索. 1.include#inclu ...

  6. 字符串基本操作 c语言,数据结构C语言字符串的基本操作.doc

    数据结构C语言字符串的基本操作 串的基本操作 #include #include #include #define m 100 typedef struct{ char ch[m]; int leng ...

  7. C语言数据结构线性表上机实验报告,数据结构实验报告实验一线性表_图文

    数据结构实验报告实验一线性表_图文 更新时间:2017/2/11 1:23:00  浏览量:763  手机版 数据结构实验报告 实验名称: 实验一 线性表 学生姓名: 班 级: 班内序号: 学 号: ...

  8. c语言程序设计第五版实验报告九,C语言程序设计实验报告-实验九.doc

    C语言程序设计实验报告-实验九.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3 ...

  9. C语言数据结构【手抄版】第五章 树和二叉树【尾篇】二叉树C实现

    封装二叉树算法 字符串工具,规避了了数字类型字符串比较不准确的BUG,string.h: #pragma once #ifdef __cplusplus extern "C" { ...

最新文章

  1. python安装依赖失败_python - pip安装jq依赖关系失败 - SO中文参考 - www.soinside.com
  2. 配置hibernate手动配置
  3. 这家自动驾驶公司融资2.7亿美元,京东美团齐出手
  4. java 广义表_数据结构:广义表的实现(Java)
  5. 51Nod 1283 最小周长
  6. postgresql 备份_PostgreSQL的备份与恢复
  7. 将 gitblog 的博客内容搬迁到 CSDN
  8. Linux下汇编语言学习笔记13 ---
  9. 华为Mate 40 Pro+真机现身:外观实锤,价格近万!
  10. 首轮超巨诞生!利拉德轰50分送超远三分压哨绝杀 开拓者4-1淘汰雷霆
  11. html5 音乐转盘,HTML5 幸运大转盘
  12. windows 2003系列之搭建域环境
  13. python简单爬虫代码-一则python3的简单爬虫代码
  14. 查看SQLSERVER内部数据页面的小插件Internals Viewer
  15. ANT的环境搭建和开发
  16. 我要用生锈的机关枪击穿现在
  17. 小程序实现身份证取景框拍摄-uniapp版
  18. Hadoop系统中的单点故障解决方案总结
  19. 汉澳sinox载入ntfs硬盘,移动ntfs硬盘,u盘 并读写完全成功
  20. 小布老师oralce讲座笔记(六)

热门文章

  1. 【转载】python两个列表获取交集,并集,差集
  2. oracle数据库解锁表
  3. Linux Vim三种工作模式(命令模式、输入模式和编辑模式)详解
  4. 【今日CV 计算机视觉论文速览 第136期】Wed, 26 Jun 2019
  5. 【今日CV 计算机视觉论文速览】19 Mar 2019
  6. NIPS 2018 接收论文list 完整清单
  7. 数组算法 往数组尾部添加一条数据1202
  8. python-字符串转义符号
  9. linux-shell入门-shell两种使用方式-shell的基本特性
  10. 远程访问数据库出错的解决办法