在学二叉树的时候,对结构体有个疑问。如下,定义一个二叉树节点结构体,并以先序顺序插入节点,以中序遍历打印数据:
#include <stdio.h>
#include <stdlib.h>
//二叉树结构体
typedef struct BitNode {
int data;
struct BitNode* lchild, * rchild;
}BitNode,*BiTree;
//先序顺序建立二叉链表
void CreatBiTree(BiTree *tree) {
int n;
printf("请按先序顺序输入元素:\n");
scanf_s("%d", &n);
if (n == 0) {
*tree = NULL;
}
else {
*tree = (BitNode*)malloc(sizeof(BitNode));
(*tree)->data = n;
CreatBiTree(&((*tree)->lchild));
CreatBiTree(&((*tree)->rchild));
}
}
//中序遍历二叉树
void InOrderTraverse(BiTree T) {
if (T) {
InOrderTraverse(T->lchild);
printf("%d", T->data);
InOrderTraverse(T->rchild);
}
}
void main() {
BiTree tree;
CreatBiTree(&tree);
InOrderTraverse(tree);
}
1.结构体定义的后面有个*BiTree,然后再main函数里定义了BiTree类型的变量tree,那这个tree不就是指向节点的指针吗,它本身不就是地址吗?那为啥给CreatBiTree传参的时候,还要加个取地址符呢?tree本身不就是一个地址吗?对地址取地址是为什么呢?
2.还有个疑问就是在CreatBiTree函数里面的参数,BiTree *tree
,BiTree本身就是指针类型,后面又加个星号是为什么呢?理解不了这里的意思,我的理解是BiTree *tree = BitNode **tree,这也没有意义呀,这是什么意思呢?