数据结构课程设计之树与二叉树的转换Word文档下载推荐.docx
- 文档编号:12996973
- 上传时间:2022-10-01
- 格式:DOCX
- 页数:14
- 大小:89.75KB
数据结构课程设计之树与二叉树的转换Word文档下载推荐.docx
《数据结构课程设计之树与二叉树的转换Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计之树与二叉树的转换Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
}PTNode;
/*双亲表示法树结构*/typedefstruct
PTNodenode[MAX_TREE_SIZE];
intcount;
//根的位置和节点个数
}PTree;
/*树的孩子兄弟表示结点结构定义*/typedefstructnode{
14
structnode*firstchild;
structnode*rightsib;
}BTNode,*BTree;
第三章算法设计(流程图)
流程图:
开始
主菜单
退出程序
1
2
3
4
5
6
双亲法
建树
前序遍历 后序遍历 前序遍历
(递归) (递归) (非递归)
后序遍历
(非递归)
层次遍历
按照格式输
入各个结点
输出树的结
点情况
输出遍历结果
9
副菜单
第四章详细设计(源代码)
详细设计共有以下函数的实现:
树的初始化函数(双亲法和孩子结点法两种),建树函数,输出树函数,树的前序遍历函数(递归和非递归两种),树的后序遍历函数(递归和非递归两种),树的层次遍历函数,一般树和二叉树的转换函数。
主菜单和副菜单。
主函数。
具体代码如下:
//初始化树(双亲表示法)voidinit_ptree(PTree*tree)
tree->
count=-1;
}
//初始化树结点(孩子兄弟表示法)BTNodeGetTreeNode(intx)
BTNodet;
t.data=x;
t.firstchild=t.rightsib=NULL;
returnt;
//树的前序遍历(递归)voidpreorder(BTNode*T)
if(T!
=NULL)
printf("
%d"
T->
data);
preorder(T->
firstchild);
rightsib);
//树的前序遍历(非递归)voidpreorder2(PTreeT)
inti;
for(i=0;
i<
T.count;
i++)
T.node[i]);
//树后序遍历(递归)voidinoeder(BTNode*T)
inoeder(T->
printf("
inoeder(T->
//树后序遍历(非递归)voidinoeder2(PTreeT)
for(i=T.count-1;
i>
=0;
i--)
//层次遍历voidlevel(PTreeT)
//水平输出二叉树voidPrintBTree(BTNode*root,intlevel)
if(root!
PrintBTree(root->
rightsib,level+1);
for(i=1;
=8*level;
"
);
%d\n"
root->
firstchild,level+1);
//输出树voidprint_ptree(PTreetree)
序号 结点 双亲\n"
=tree.count;
%8d%8d%8d"
i,tree.node[i].data,tree.node[i].parent);
\n"
/*用双亲表示法创建树*/PTreeCreatTree(PTreeT)
inti=1;
intfa,ch;
PTNodep;
for(i=1;
ch!
=-1;
输入第%d结点:
i);
scanf("
%d,%d"
&
fa,&
ch);
p.data=ch;
p.parent=fa;
T.count++;
T.node[T.count].data=p.data;
T.node[T.count].parent=p.parent;
创建的树具体情况如下:
print_ptree(T);
returnT;
/*一般树转换成二叉树*/
BTNode*change(PTreeT)
inti,j=0;
BTNodep[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));
p[i]=GetTreeNode(T.node[i].data);
ip=&
p[i];
is=&
p[j];
while(T.node[i].parent!
=is->
data)
j++;
if(!
(is->
firstchild))
else
is->
firstchild=ip;
ir=ip;
ir->
rightsib=ip;
Tree=&
p[0];
returnTree;
/*主菜单*/
voidMenu()
=================主菜单=======================\n"
***输入1 以双亲法创建一棵一般树***\n"
printf("
***输入2 树的前序遍历(递归)*******\n"
***输入3 树的后序遍历(递归)*******\n"
***输入4 树的前序遍历(非递归)*****\n"
***输入5 树的后序遍历(非递归)*****\n"
***输入6 层次序的非递归遍历*******\n"
***输入0 退出程序*****************\n"
==============================================\n"
请输入执行的指令:
"
/*副菜单*/
voidMenu2()
*****************副菜单*******************\n"
***9 返回主菜单继续操作*******\n"
***0 退出程序*****************\n"
/*主函数*/
voidmain()
inti=0,c1,c2;
PTreeT;
BTNode*Tree;
init_ptree(&
T);
loop:
Menu();
scanf("
%d"
c1);
switch(c1)
case 1:
建立一般树,依次输入各个结点情况:
输入结点方式:
双亲数据,整型数据(第一个结点双亲数据为-1,
最后以-1,-1结束)\n例子:
-1,1 1,3\n"
T=CreatTree(T);
Tree=change(T);
一般树转换成二叉树后的情况:
PrintBTree(Tree,i);
getchar();
break;
case 2:
树的前序遍历(递归):
preorder(Tree);
case 3:
树的后序遍历(递归):
inoeder(Tree);
break;
case 4:
树的前序遍历(非递归):
preorder2(T);
case 5:
树的后序遍历(非递归):
inoeder2(T);
case 6:
树的层次遍历:
level(T);
case 0:
exit
(1);
Menu2();
c2);
if(c2==9)
gotoloop;
elseif(c2==0)
exit
(1);
第五章调试与分析
程序开始:
建立一棵一般树:
输入指令1
输入结点的方式:
双亲数据(整型),结点数据(整型)以-1,-1结束如:
-1,11 ,2-1,-1
一般树创建完的具体情况:
把一般树转换为二叉树后:
副菜单选择:
选择9继续操作运用各种遍历形式遍历树:
副菜单选择:
选择0结束程序
第六章实验总结
通过本次程序设计,让我更深层次地了解到了树各种函数的运用,如何运用各种存储结构创建树,以及在实验中还涉及到递归的运用,递归的思想省去了复杂的算法设计。
在实验中不可避免的出现了大大小小的问题,在调试中透彻领悟各种算法的真谛,同样的错误在下次遇到时就可以避免了。
在实验中,分别使用了
VC++和TurboC两种编译器,在使用各种编译器的同时能了解不同的编译器的不同之处,取长补短,更好的设计程序。
参考文献
[1]赵坚,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 二叉 转换