二叉树创建时的一个问题

本文详细解释了使用双指针创建二叉树的原因,并对比了单指针方式的问题所在。通过实例说明了如何正确利用双指针来实现二叉树节点的动态分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

typedef struct BiTNode

{
    char data;
    struct BiTNode *lchild,*rchild;
}BT;

void Creat(BT **T)

{ char c;
    scanf("%c",&c);

 *T = (BT *) malloc(sizeof(BT));
(**T).data=c;                                       //或 (*T)->data = c;

Creat(&(*T)->lchild);

Creat(&(*T)->rchild);

}

void main()

{

BT Tree;

Creat(&&Tree);

}

为什么要用双重指针?

为什么不是以下的写法?

void Creat(BT *T)

{ char c;
    scanf("%c",&c);

T = (BT *) malloc(sizeof(BT));
T->data=c;                                      
Creat(&(*T)->lchild);

Creat(&(*T)->rchild);

}

void main()

{

BT *Tree;

Creat(Tree);

}

因为是动态创建二叉树的每个节点,所以malloc写在了Creat里

*Tree是一个节点

Tree是该节点的地址

&Tree是该节点的地址的地址


当Creat(Tree)时

要求传入*Tree节点的指针

可是节点还没被定义

这个指针没有指向,是野指针,无法代入函数

好在,这个指针的指针是指向这个Tree的,能代入



所以才用双指针






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值