树转换成二叉树-树的前序、后序的递归、非递归和层次序的非递归
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include <>
#include <>
#include <>
#define MAX_TREE_SIZE 100
typedef struct
{
int data;
int parent; ata,[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");
=ch;
=fa;
++;
[].data = ;
[].parent = ;
}
printf("\n");
printf("创建的树具体情况如下:\n");
print_ptree(T);
return T;
}
/*一般树转换成二叉树*/
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<;i++)
{
p[i]=GetTreeNode[i].data);
}
for(i=1;i<;i++)
{
ip=&p[i];
is=&p[j];
while[i].parent!=is->data)
{
j++;
is=&p[j];
}
if(!(is->firstchild))
{
is->firstchild=ip;
ir=ip;
}
else
{
ir->rightsib=ip;
ir=ip;
}
}
Tree=&p[0];
return Tree;
}
/*主菜单*/
void Menu()
{
printf("=================主菜单=======================\n");
printf("***输入-以双亲法创建一棵一般树***\n");
printf("***输入2-------------树的前序遍历(递归)*******\n");
printf("***输入3-------------树的后序遍历(递归)*******\n");
printf("***输入4-------------树的前序遍历(非递归)*****\n");
printf("***输入5-------------树的后序遍历(非递归)*****\n");
printf("***输入6-------------层次序的非递归遍历*******\n");
printf("***输入0-------------退出程序*****************\n");
printf("==============================================\n");
printf("请输入执行的指令:");
}
/*副菜单*/
void Menu2()
{
printf("*****************副菜单*******************\n");
printf("***9-------------返回主菜单继续操作*******\n");
printf("***0-------------退出程序*****************\n");
}
/*主函数*/
void main()
{
int i=0,c1,c2;
PTree T;
BTNode *Tree;
init_ptree(&T);
loop:
Menu();
scanf("%d",&c1);
switch(c1)
{
case 1:
printf("建立一般树,依次输入各个结点情况:\n");
printf("输入结点方式:双亲数据,整型数据(第一个结点双亲数据为-1,最后以-1,-1结束)\n例子:-1,1 1,3\n");
T=CreatTree(T);
Tree=change(T);
printf("一般树转换成二叉树后的情况:\n");
PrintBTree(Tree,i);
getchar();
break;
case 2:
printf("树的前序遍历(递归):\n");
preorder(Tree);
printf("\n");
break;
case 3:
printf("树的后序遍历(递归):\n");
inoeder(Tree);
printf("\n");