目录
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()会将回车一并读入,所以,如果你输入的时候出现死递归,请试试将字符一次性输入。