先序创建二叉树

来源:百度知道 编辑:UC知道 时间:2024/06/07 14:57:09
tpyedef struct node
{char data;
struct node *lchild ,* rchild;
}bintnode;
typedef bintnode *bintree;
void createtree(bintree *t)
{char ch;
if((ch=getchar())==' ')
*t=null;
else{
*t=(bintnode *)malloc(sizeof(bintnode));
(*t)->data=ch;
createbintree(&(*t)->lchild);
createbintree(&(*t)->rchild);
}}
以上是一篇资料上给出的先序创建二叉树的例题
我怎么看也看不懂他是如何把左右孩子的地址赋给双亲的lchild和rchild的
本人理解有限希望不要见笑。
在此希望哪位高人能分析一下以上代码。
这个我知道但是他是如何把节点的地址分别赋给双亲的Lchild和rchild的呢

递归而已。
{
*t=(bintnode *)malloc(sizeof(bintnode));
(*t)->data=ch; //创建节点
createbintree(&(*t)->lchild); //创建左孩子
createbintree(&(*t)->rchild);}//创建右孩子

+++++++++++++++++

当我们调用创建程序时,
bintree root;//调用程序里声明
createbintree(&root);//在这里,有一个所谓的"形实"结合,
在createbintree子程序里,展开,
void createtree(bintree *t)
{//在这里,隐含着
// *t=&root这样一个赋值,注意它是传址方式
//root的值已有了,它的左右孩子的位置也有了
*t=(bintnode *)malloc(sizeof(bintnode));
(*t)->data=ch;
//把root->lchild的地址传进去
createbintree(&(*t)->lchild);
//把root->rchild的地址传进去
createbintree(&(*t)->rchild);}