树转换成二叉树-树的前序、后序的递归、非递归和层次序的非递归

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

相关文档
最新文档