数据结构课程设计之树与二叉树的转换.doc

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PAGE PAGE 2 纲要 一 程序设计要求与目的 二 存储结构设计 三 算法设计(流程图) 四 详细设计(源代码) 五 调试与分析 六 实验总结 七 参考文献 第一章 程序设计要求与目的 题目:树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。 第二章 存储结构设计 引入头文件: #include stdio.h #include malloc.h #include stdlib.h 设置常量: #define MAX_TREE_SIZE 100 一般树的存储结构有以下几种:双亲结点,孩子结点,孩子兄弟结点。本实验运用到的是双亲结点和孩子兄弟结点。具体存储结构如下: /*树的双亲表示结点结构定义*/ typedef struct { int data; int parent; //双亲位置域 }PTNode; /*双亲表示法树结构*/ typedef struct { PTNode node[MAX_TREE_SIZE]; int count; //根的位置和节点个数 }PTree; /*树的孩子兄弟表示结点结构定义*/ typedef struct node{ int data; struct node *firstchild; struct node *rightsib; }BTNode,*BTree; 第三章 算法设计(流程图) 流程图: 退出程序 退出程序 层次遍历 开始 双亲法 建树 按照格式输入各个结点 输出树的结点情况 1 主菜单 前序遍历 (递归) 后序遍历 (递归) 前序遍历 (非递归) 后序遍历 (非递归) 输出遍历结果 副菜单 退出程序 2 3 5 4 0 0 6 9 第四章 详细设计(源代码) 详细设计共有以下函数的实现: 树的初始化函数(双亲法和孩子结点法两种),建树函数,输出树函数,树的前序遍历函数(递归和非递归两种),树的后序遍历函数(递归和非递归两种),树的层次遍历函数,一般树和二叉树的转换函数。 主菜单和副菜单。 主函数。 具体代码如下: //初始化树(双亲表示法) void init_ptree(PTree *tree) { tree-count=-1; } //初始化树结点(孩子兄弟表示法) BTNode GetTreeNode(int x) { BTNode t; t.data=x; t.firstchild=t.rightsib=NULL; return t; } //树的前序遍历(递归) void preorder(BTNode *T) { if(T!=NULL) { printf(%d ,T-data); preorder(T-firstchild); preorder(T-rightsib); } } //树的前序遍历(非递归) void preorder2(PTree T) { int i; for(i=0;iT.count;i++) { printf(%d ,T.node[i]); } } //树后序遍历(递归) void inoeder(BTNode *T) { if(T!=NULL) { inoeder(T-firstchild); printf(%d ,T-data); inoeder(T-rightsib); } } //树后序遍历(非递归) void inoeder2(PTree T) { int i; for(i=T.count-1;i=0;i--) { printf(%d ,T.node[i]); } } //层次遍历 void level(PTree T) { int i; for(i=0;iT.count;i++) { printf(%d ,T.node[i]); } } //水平输出二叉树 void PrintBTree(BTNode *root,int level) { int i; if(root!=NULL) { PrintBTree(root-rightsib,level+1); for(i=1;i=8*level;i++) printf( ); printf(%d\n,root-data); PrintBTree(root-firstchild,level+1); } } //输出树 void print_ptree(PTree tree) { i

文档评论(0)

a13355589 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档