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

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

衡阳师范学院《数据结构》课程设计题目:树与二叉树的转换

系别:计算机科学系

专业:计算机科学与设计

班级:1302

学生姓名:戴志豪

学号:13190217

指导老师:赵磊

完成日期:2015年1月3号

目录

一.需求分析 (3)

二.概要设析 (3)

三.详细设计 (5)

1.树的建立 (5)

2.一般树转化成二叉树 (6)

3.先序遍历树的递归算法 (7)

4.后序遍历树的递归算法 (7)

5.先序遍历树的非递归算法 (7)

6.后序遍历树的非递归算法 (8)

7.层次序非递归的算法 (9)

四.设计与调试分析 (10)

五.用户手册 (10)

六.测试结果 (11)

七.附录(源程序) (14)

八.总结 (20)

一.需求分析

本程序的功能是对任意树进行递归前序遍历和后序遍历,以及实现树的非递归的前序、

和后序遍历,还有对树的层序遍历以及树与二叉树的转换。

二.概要设计

对于本次设计,需要用到树的建立,树与二叉树的转换算法先序后序二叉树的递归算法;

先序后序非递归算法;层次序遍历算法

1树的建立

用链表实现创建一个树结点的结构体,从键盘输入数据,存入数组。把下标为2*i+1 的值存入左孩子,为2*i+2的存入右孩子。 BiNode creat(),BiNode stree_creat(char *a,int k)。

开始

Y

参数数组是否空或

N

把数组的值赋给结点的数

返回空指针

递归的给左子树赋值参数变为a[2i+1]

递归的给右子树赋值参数变为a[2i+2]

返回根指针

结束

2一般树转化成二叉树

转换时结点的第一个孩子变为它的左孩子,兄弟节点变为他的右孩子。void

exchange(),class Tree

3先序遍历树的递归算法

若二叉树为空,则空操作;否则(1)访问根结点;(2)先序遍历左子树;(3)先序

遍历右子树。void PreOrder(BiNode root)。

开始

Y

判断结点是否

N

访问根结点

按前根遍历方式

遍历左子树

按前根遍历方式遍

历左子树

结束

4后序遍历树的递归算法

若二叉树为空,则空操作;否则(1)后序遍历左子树;(2)后序遍历右子树。(3)访问根结点;void PostOrder(BiNode root)。

开始

Y

判断结点是否

N

按后根遍历方式遍

历左子树

按后根遍历方式遍

历右子树

访问根结点

结束

5先序遍历树的非递归算法

若二叉树为空,则空操作;否则(1)先将根节点进栈,在栈不为空时循环;(2)出栈p,访问*p若其右孩子节点不空将右孩子节点进栈若其左孩子节点不空时再将其左孩子节点进栈。

6后序遍历树的非递归算法

采用一个栈保存需要返回的指针,先扫描根节点所有的左孩子节点并一一进栈,出栈一个节点*b作为当前节点,然后扫描该节点的右子树。当一个节点的左右孩子节点均访问后再访问该节点,如此重复操作,直到栈空为止。

7层次序的非递归遍历

按照树的层次从左到右访问树的结点,层序遍历用于保存结点的容器是队列。void LevelOrder(BiNode root)。

三.详细设计

1树的建立:

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;

2一般树转换成二叉树

BTNode *change(PTree T)

{

int i,j=0;

BTNode p[MAX_TREE_SIZE];

BTNode *ip,*is,*ir,*Tree;

ip=(BTNode *)malloc(sizeof(BTNode));

is=(BTNode *)malloc(sizeof(BTNode));

ir=(BTNode *)malloc(sizeof(BTNode));

Tree=(BTNode *)malloc(sizeof(BTNode));

for(i=0;i

{

p[i]=GetTreeNode(T.node[i].data);

}

for(i=1;i

{

ip=&p[i];

is=&p[j];

while(T.node[i].parent!=is->data)

相关文档
最新文档