实验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 树相关推荐

  1. 23V3有这种C语言表达式吗,数据结构(C语言版第2版_李云清)习题答案2012-12.doc

    数据结构(C语言版第2版_李云清)习题答案2012-12.doc 第 1 章 绪论 1.1 什么是数据结构? [答]:数据结构是指按一定的逻辑结构组成的一批数据,使用某种存储结构将这批数据存储 于计算 ...

  2. 数据结构c语言版实验报告2,数据结构(C语言版) 实验报告 (2)

    <数据结构(C语言版) 实验报告 (2)>由会员分享,可在线阅读,更多相关<数据结构(C语言版) 实验报告 (2)(15页珍藏版)>请在人人文库网上搜索. 1.数据结构(C语言 ...

  3. 【数据结构C语言版】课程实验-图的应用

    数据结构C语言版 - 图的应用 前言: 大二本科计算机科学与技术程序员一枚,总结几篇课后实验内容,希望可以帮助到大家. 软件:Devc++ 实验目的: 通过实验掌握图的基本存储原理,能够利用图模型存储 ...

  4. 数据结构c语言版第三版实验四答案,数据结构(C语言版)第三四章习题答案

    Push( &s, t[i]); while( !EmptyStack( &s)) {// 每弹出一个字符与相应字符比较 temp=Pop (&s); if( temp!=S[ ...

  5. 数据结构c语言版习题

    数据结构c语言版习题 文章目录 第一章 绪论 第二章 线性表 第四章 串 第五章数组和广义表作业 第六章 树与二叉树理论作业 第七章图作业 第八章查找作业 第一章 绪论 一.选择题 1.以下说法正确的 ...

  6. 逆置单链表c语言程序,(数据结构C语言版)顺序表和单链表的逆置

    <(数据结构C语言版)顺序表和单链表的逆置>由会员分享,可在线阅读,更多相关<(数据结构C语言版)顺序表和单链表的逆置(7页珍藏版)>请在人人文库网上搜索. 1.实验1-1顺序 ...

  7. 以串结构存储c语言版,数据结构C语言版 串的块链存储表示和实现

    <数据结构C语言版 串的块链存储表示和实现>由会员分享,可在线阅读,更多相关<数据结构C语言版 串的块链存储表示和实现(13页珍藏版)>请在人人文库网上搜索. 1.*数据结构C ...

  8. 数据结构c语言版朱战立报告,数据结构(C语言版)

    本书是Sedgewick彻底修订和重写的C算法系列的第一本.全书分为四部分,共16章.第一部分"基础知识"(第1-2章)介绍基本算法分析原理.第二部分"数据结构" ...

  9. c语言第二版课后答案pdf,数据结构(C语言版)第2版习题答案—严蔚敏.pdf

    数据结构( C语言版) (第2版) 课后习题答案 李冬梅 2015.3 目 录 第 1 章 绪论 1 第 2 章 线性表 5 第 3 章 栈和队列 14 第 4 章 串.数组和广义表 27 第 5 章 ...

  10. 数据结构c语言邓红卫答案,数据结构(C语言版)

    辽宁省"十二五"普通高等教育本科省级规划教材. 数据结构学习与实验指导(C语言版)(普通高校本科计算机专业特色教材精选·算法与程序设计) ¥30.00定价:¥30.00 /2012 ...

最新文章

  1. HiCar基本功能介绍
  2. windows系统安装airflow模块(一)
  3. 想学Python?那这套教程再适合不过了!
  4. 数据结构实验4:C++实现循环队列
  5. php 导出csv文件
  6. android fragmentactivity fragment,Android:Activity与Fragment通信(99%)完美解决方案
  7. Mybatis源码阅读(四):核心接口4.1——StatementHandler
  8. 爬虫实例6 爬取联英人才网147页招聘信息,并导入数据库
  9. 天联无法ping通服务器地址_金万维天联标准版无法连接,怎么办?
  10. autocad html 插件,cad插件有哪些
  11. PHP(阿里云短信验证码)
  12. 树莓派笔记5:自制小车(简单避障)
  13. html5广告具有什么特性,最快认知什么才是HTML5广告!
  14. 云计算技术 - 基础环境搭建
  15. [android] 运行编译报错:Entry name ‘assets/Icoxx.png‘ collided
  16. mysql数据库教程级联_Mysql实现级联操作(级联更新、级联删除)
  17. SQL server更改表的架构名称——修改表名前缀为[dbo]
  18. 单调函数有界性类题目解法
  19. HP Z840 安装Ubuntu18.04,gpu版的tensorflow,keras全程纪要,硬件Qurado P4000两块
  20. Java笔记09——常用类

热门文章

  1. 《我不想与我不能》 ——刘未鹏
  2. UVa1586 Molar Mass
  3. 经典力学学习(运动学)——质点运动学
  4. 几款步进电机驱动IC
  5. 存储过程中CreateParameter的参数说明
  6. WinX.DVD.Ripper.Platinum.v5.8.3.WinALL.Regged-BLiZZARD
  7. LeetCode 297 Serialize and Deserialize Binary Tree
  8. MSN:小绿人的雄心
  9. 第十七届全国大学智能汽车竞赛全国总决赛名单
  10. 走遍欧洲 —— 东欧、南斯拉夫