用C实现二叉树的建立,先序、中序、后序历遍,深度算法。紧急!!

希望高手帮忙解答,感激不尽!!题目:采用链式存储结构建立如图所示的二叉树,分别按先序、中序、后序遍历该二叉树,输出对应遍历的结点序列,并设计求二叉树深度的算法。请附上注解。谢谢!!
从上到下,从左到右,字母依次是ABCDEFGHIJKLM

#include <stdio.h>//头文件

#include <stdlib.h>

#include <malloc.h>

typedef struct BiTNode

{

    char data;

    struct BiTNode *lchild,*rchild;

BiTNode,*BiTree;//定义结点类型

BiTree CreateBiTree()//创建树

{

    char p;BiTree T;

    scanf("%c",&p);

    if(p==' ')

        T=NULL;

    else

    {

        T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间

        T->data=p;

        T->lchild=CreateBiTree();

        T->rchild=CreateBiTree();

    }

    return (T);

}

void PreOrder(BiTree T)//先序

{

     if(T!=NULL)

   {

       printf("%c",T->data);

       PreOrder(T->lchild);

       PreOrder(T->rchild);

      

    }

}

void InOrder(BiTree T)//中序

{

     if(T!=NULL)

   {

       InOrder(T->lchild);

        printf("%c",T->data);

       InOrder(T->rchild);

      

    }

}

void PostOrder(BiTree T)//后序

{

     if(T!=NULL)

   {

       PostOrder(T->lchild);

       PostOrder(T->rchild);

       printf("%c",T->data);

    }

}

int Depth(BiTree T)/* 深度 */

 {

   

   if(T==NULL)

   return(0);

   else

   return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild));

   }

void main()//主函数

{

    BiTree Ta;

    Ta=CreateBiTree();

     printf("先序遍历:");

     printf("\n");

     PreOrder(Ta);

     printf("\n");

     printf("中序遍历:");

     printf("\n");

     InOrder(Ta);

     printf("\n");

     printf("后序遍历:");

     printf("\n");

     PostOrder(Ta);

     printf("\n");

     printf("深度为:%d",Depth(Ta));

   }

根据你给的树,你输入如下:

ABD**EG*J***C*FHK**L**IM***

(其中*代表空格,输入时*代表空格)

有问题联系!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-30
#include <stdio.h>//头文件
#include <stdlib.h>
#include <malloc.h>
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}
BiTNode,*BiTree;//定义结点类型
BiTree CreateBiTree()//创建树
{
char p;BiTree T;
scanf("%c",&p);
if(p==' ')
T=NULL;
else
{
T=(BiTNode *)malloc(sizeof(BiTNode));//为结点开辟空间
T->data=p;
T->lchild=CreateBiTree();
T->rchild=CreateBiTree();
}
return (T);
}
void PreOrder(BiTree T)//先序
{
if(T!=NULL)
{
printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);

}
}
void InOrder(BiTree T)//中序
{
if(T!=NULL)
{
InOrder(T->lchild);
printf("%c",T->data);
InOrder(T->rchild);

}
}
void PostOrder(BiTree T)//后序
{
if(T!=NULL)
{
PostOrder(T->lchild);
PostOrder(T->rchild);
printf("%c",T->data);
}
}
int Depth(BiTree T)/* 深度 */
{

if(T==NULL)
return(0);
else
return 1+(Depth(T->lchild)>Depth(T->rchild)? Depth(T->lchild):Depth(T->rchild));
}
void main()//主函数
{
BiTree Ta;
Ta=CreateBiTree();
printf("先序遍历:");
printf("\n");
PreOrder(Ta);
printf("\n");
printf("中序遍历:");
printf("\n");
InOrder(Ta);
printf("\n");
printf("后序遍历:");
printf("\n");
PostOrder(Ta);
printf("\n");
printf("深度为:%d",Depth(Ta));
}
根据你给的树,你输入如下:
ABD**EG*J***C*FHK**L**IM***
(其中*代表空格,输入时*代表空格)
有问题联系!
第2个回答  2010-05-14
你也太小气了,我有这个递归的程序,但你的分太少了!