如何创造char二叉树C语言,递归创建二叉树c语言实现+详细解释
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
void?CreatBiTree(BiTree?T)
{
char?a;
scanf("%c",&a);
if(a=='@')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=a;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
雖能編譯,但不能正確運(yùn)行,冥思苦想n小時(shí),未果
遂改其為
BiTree?CreatBiTree()
{
char?a;
BiTree?T;
scanf("%c",&a);
if(a=='@')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=a;
T->lchild=CreatBiTree();
T->rchild=CreatBiTree();
}
return?T;
}
不再用傳遞參數(shù),用返回值,正確編譯運(yùn)行,喜。
重審前程序,改為
void?CreatBiTree(BiTree?*T)
{
char?a;
scanf("%c",&a);
if(a=='@')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiNode));
(*T)->data=a;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
正確編譯運(yùn)行,惑。
又冥思苦想n小時(shí),終于悟出其中原由(好象多難似的,或者其實(shí)是我太愚鈍)
原來(lái)還是對(duì)指針的理解不夠深刻
最開(kāi)始的程序傳遞的是Node型結(jié)構(gòu)體的指針,于是在函數(shù)中會(huì)生成一個(gè)形參也指向這個(gè)結(jié)構(gòu)體,但在函數(shù)中有一句T=(BiTree)malloc(sizeof(BiNode));?改變了形參的指向,以后再對(duì)形參的任何操作不會(huì)在主函數(shù)中的T產(chǎn)生影響。
下面是兩個(gè)完整的程序,分別用的兩種建樹(shù)方法
#include?"stdlib.h"
#include?"conio.h"
typedef?struct?node
{
char?data;
struct?node?*lchild,*rchild;
}BiNode,*BiTree;
BiTree?CreatBiTree()
{
char?a;
BiTree?T;
scanf("%c",&a);
if(a=='@')
T=NULL;
else
{
T=(BiTree)malloc(sizeof(BiNode));
T->data=a;
T->lchild=CreatBiTree();
T->rchild=CreatBiTree();
}
return?T;
}
void?PreOrderTraverse(BiTree?T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void?InOrderTraverse(BiTree?T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void?PostOrderTraverse(BiTree?T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
main()
{
BiTree?T;
clrscr();
T=CreatBiTree();
PreOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
}
二
#include?"stdlib.h"
#include?"conio.h"
typedef?struct?node
{
char?data;
struct?node?*lchild,*rchild;
}BiNode,*BiTree;
void?CreatBiTree(BiTree?*T)
{
char?a;
scanf("%c",&a);
if(a=='@')
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiNode));
(*T)->data=a;
CreatBiTree(&((*T)->lchild));
CreatBiTree(&((*T)->rchild));
}
}
void?PreOrderTraverse(BiTree?T)
{
if(T)
{
printf("%c",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void?InOrderTraverse(BiTree?T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c",T->data);
InOrderTraverse(T->rchild);
}
}
void?PostOrderTraverse(BiTree?T)
{
if(T)
{
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c",T->data);
}
}
main()
{
BiTree?T;
clrscr();
CreatBiTree(&T);
PreOrderTraverse(T);
printf("\n");
InOrderTraverse(T);
printf("\n");
PostOrderTraverse(T);
}
更多數(shù)據(jù)結(jié)構(gòu)實(shí)例http://hi.baidu.com/longzuo
總結(jié)
以上是生活随笔為你收集整理的如何创造char二叉树C语言,递归创建二叉树c语言实现+详细解释的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: for(the first time与t
- 下一篇: stm32入门c语言下载,STM32入门