C语言:二叉树的实现_我叫河蟹_百度空间

五一放假在家,由于没带散热器回家,不敢开虚拟机跑程序,跑连手提也挂掉,只好等回学校才把程序完成。

#include <stdio.h>
#include <stdlib.h>

typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

BiTree Create(BiTree T){
char ch;
ch = getchar();
if(ch=='#')
   T=NULL;
else{
   if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
   printf("Error!");
   T->data =ch;
   T->lchild =Create(T->lchild);
   T->rchild =Create(T->rchild);
}
return T;
}

void Preorder(BiTree T){
if(T){
   printf("%c",T->data);
   Preorder(T->lchild);
   Preorder(T->rchild);
}
}

int Sumleaf(BiTree T)
{
int sum=0,m,n;
if(T){
   if((!T->lchild)&&(!T->rchild))
    sum++;
    m=Sumleaf(T->lchild);
    sum+=m;
    n=Sumleaf(T->rchild);
    sum+=n;
   }
   return sum;
}

void zhongxu(BiTree T)
{
if(T){
   zhongxu(T->lchild);
   printf("%c",T->data);
   zhongxu(T->rchild);
}
}

void houxu(BiTree T)
{
if(T){
   houxu(T->lchild);
   houxu(T->rchild);
   printf("%c",T->data);
}
}


int Depth(BiTree T)
{
int dep=0,depl,depr;
if(!T)dep=0;
   else{
    depl=Depth(T->lchild);
    depr=Depth(T->rchild);
    dep =1+(depl>depr ? depl:depr);
    }
    return dep;
}

int main()
{
BiTree T;
int sum,dep;
T=Create(T); //初始化二叉树
Preorder(T); //打印节点内容
printf("\n");
zhongxu(T); //中序遍历
printf("\n");
houxu(T); //后序遍历
printf("\n");
sum=Sumleaf(T); //树的节点数
printf("%d",sum);
dep=Depth(T); //树的深度
printf("\n%d\n",dep);
}

例如输入序列ABC##DE#G##F###(其中的“#”表示空,并且输入过程中不要加回车,因为回车也有对应的ASCII码,是要算字符的,但是输入完之后可以按回车退出),然后再按ALT+F5显示用户界面,这时候就能够看到结果了。
另外你必须会手动建立一棵二叉树,保证你输入的序列能构成一棵二叉树,否则你怎么输入,按{zh1}按多少回车程序也不会结束!



郑重声明:资讯 【C语言:二叉树的实现_我叫河蟹_百度空间】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——