typedef struct btNode {
struct btNode *right;
struct btNode *left;
void *data;
} btNode_t;
typedef struct binTree
{
btNode_t *root;
btNode_t *current;
} binTree_t;
int buildBintree(binTree_t *tree)
{
tree = (binTree_t*) malloc(sizeof(binTree_t));
if (tree == NULL)
return ERROR;
tree->root = NULL;
tree->current = NULL;
return SUCCESS;
}
我需要在我的二叉树中插入第一片叶子,但是当我尝试创建 if 来询问tree-> current是否指向null时,我不知道为什么我的程序会崩溃在叶子创建功能中。
int buildLeaf(binTree_t *tree, void *info)
{
if ((tree->current) != NULL)
return ERROR;
btNode_t *btnode;
btnode = (btNode_t*) malloc(sizeof(btNode_t));
if (btnode == NULL)
return ERROR;
if (isEmptyBintree(tree))
tree->root = btnode;
tree->current = btnode;
tree->current->data = info;
tree->current->left = NULL;
tree->current->right = NULL;
return SUCCESS;
}
我的树为空,如果当前节点没有填充,我只想添加第一片叶子
int main()
{
binTree_t *maple;
int number;
buildBintree(maple);
buildLeaf(maple,&number);
return 0;
}
答案 0 :(得分:2)
buildBintree应该接收双指针。使用单个指针,树将不会指向枫,而枫实际上是指向枫所指向的对象。
int buildBintree(binTree_t **tree)
{
*tree = (binTree_t*) malloc(sizeof(binTree_t));
if (*tree == NULL)
return -1;
(*tree)->root = NULL;
(*tree)->current = NULL;
return 0;
}
在主要情况下,您需要按以下方式致电。
int main()
{
binTree_t *maple;
int number;
buildBintree(&maple);
buildLeaf(maple,&number);
return 0;
}
答案 1 :(得分:0)
关于指针没有什么特别的。
不管类型如何,为参数分配新值都不会影响您传入其值的任何变量。
(如果您buildBinTree(NULL);
会发生什么?)
如果您希望函数修改某些内容,则需要向其传递将要更改的内容的地址。
因此,如果要让函数修改指针,则需要向其传递指针的地址。
int x = 0;
void fail(int* p) { p = &x; }
void succeed(int** p) { *p = &x; }
int main()
{
int *p = NULL;
fail(p);
/* p is still null */
succeed(&p);
/* p is not null any more */
return 0;
}