如何创造char二叉树C语言,递归创建二叉树c语言实现+详细解释
該樓層疑似違規已被系統折疊?隱藏此樓查看此樓
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);
}
}
雖能編譯,但不能正確運行,冥思苦想n小時,未果
遂改其為
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?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));
}
}
正確編譯運行,惑。
又冥思苦想n小時,終于悟出其中原由(好象多難似的,或者其實是我太愚鈍)
原來還是對指針的理解不夠深刻
最開始的程序傳遞的是Node型結構體的指針,于是在函數中會生成一個形參也指向這個結構體,但在函數中有一句T=(BiTree)malloc(sizeof(BiNode));?改變了形參的指向,以后再對形參的任何操作不會在主函數中的T產生影響。
下面是兩個完整的程序,分別用的兩種建樹方法
#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);
}
更多數據結構實例http://hi.baidu.com/longzuo
總結
以上是生活随笔為你收集整理的如何创造char二叉树C语言,递归创建二叉树c语言实现+详细解释的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: for(the first time与t
- 下一篇: stm32入门c语言下载,STM32入门