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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)

相关文档
最新文档