数据结构课程设计之树与二叉树的转换
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
纲要
一程序设计要求与目的
二存储结构设计
三算法设计(流程图)
四详细设计(源代码)
五调试与分析
六实验总结
七参考文献
第一章程序设计要求与目的
题目:树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法的实现,应包含建树的实现。
第二章存储结构设计
引入头文件:
#include
#include
#include
设置常量:
#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;
第三章算法设计(流程图)流程图:
第四章详细设计(源代码)详细设计共有以下函数的实现:
树的初始化函数(双亲法和孩子结点法两种),建树函数,输出树函数,树的前序遍历函数(递归和非递归两种),树的后序遍历函数(递归和非递归两种),树的层次遍历函数,一般树和二叉树的转换函数。
主菜单和副菜单。
主函数。
具体代码如下:
//初始化树(双亲表示法)
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;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;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) { int i; printf(" 序号结点双亲\n"); for(i=0;i<=tree.count;i++) { printf("%8d%8d%8d",i,tree.node[i].data,tree.node[i].parent); printf("\n"); } } /*用双亲表示法创建树*/ PTree CreatTree(PTree T) { int i=1; int fa,ch; PTNode p; for(i=1;ch!=-1;i++) { printf("输入第%d结点:\n",i); scanf("%d,%d",&fa,&ch); printf("\n"); p.data=ch; p.parent=fa; T.count++; T.node[T.count].data = p.data; T.node[T.count].parent = p.parent; } printf("\n"); printf("创建的树具体情况如下:\n"); print_ptree(T); return T; } /*一般树转换成二叉树*/ BTNode *change(PTree T)