二叉树操作中的各种疑惑

目录

 

1 为什么要使用二级指针

a 为什么不定义一个 结构体类型的指针传进去呢?

b 那又是如何利用二级指针进行操作的的呢

2 可不可以不使用二级指针呢? 

3  用递归创建二叉树时为什么会陷入死递归呢?


1 为什么要使用二级指针

当函数没有返回值的时候,要想对传进去的节点进行修改,则必须传入节点的地址,因为该节点是一个结构体指针类型,则接收该结构体指针的形参要使用二级指针

代码如下:

typedef char ElemType;
typedef struct BiNode
{
	ElemType data;
	struct BiNode *lchild, *rchild;
}BiNode,*BiTree;

void Creat(BiTree *bt)
{
	ElemType c;
	scanf_s("%c", &c, 1);
	if (c == '#')
		(*bt) = NULL;
	else
	{
		(*bt) = (BiTree)malloc(sizeof(BiNode));
		(*bt)->data = c;
		Creat(&(*bt)->lchild);
		Creat(&(*bt)->rchild);
	}
}

 

a 为什么不定义一个 结构体类型的指针传进去呢?

当然不行了,你是想修改结构体呢还是构建一颗二叉树呢

b 那又是如何利用二级指针进行操作的的呢

当然是间接引用了,戳这里

2 可不可以不使用二级指针呢? 

当然可以了 我们可以将函数声明为返回值类型为指针类型,将形参声明为一级指针,然后将结构体指针直接传入,然后进行操作。注意:此时的形参值时结构体指针的副本,即:虽然两个变量里面的内容相同,但是他们在内存中的地址却不同,所以修改形参对实参,即传进去的结构体指针一点影响也没有,所以要拿到修改后的变量,我们要 return 。

3  用递归创建二叉树时为什么会陷入死递归呢?

当利用scanf()进行输入时,如果你一个一个的输入,scanf()会将回车一并读入,所以,如果你输入的时候出现死递归,请试试将字符一次性输入。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值