二叉树的一个问题,高手请进

来源:百度知道 编辑:UC知道 时间:2024/05/22 19:41:47
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define NULL 0
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){ <

执行完create之后
T会return root node(根节点)
另外会把左跟右的leaves也创造出来
BiTree Create(BiTree T){
char ch;
ch=getchar(); //这一行是读使用者按了哪个按钮
if(ch=='#') //如果按了#的话
T=NULL; //那个节点就会变成叶(最后一个节点)
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) //简单的测错
printf("Error!");
T->data=ch; //把按了的字放进data
T->lchild=Create(T->lchild); //创造新的左节点<<<在这一点, 将会再呼叫自己, 之后以左节点作为sub-root再运行
T->rchild=Create(T->rchild); //创造新的右节点<<同上
}
return T; //return
}

简单来说...
当你执行完之后, 最终出来的将会是根
这里使用了叫recursion的技术, 用同一个function建造出整个binary tree..
要看懂这个
你首先要明白recursion的运行方式...
之后就很简单了