【发布时间】:2015-08-03 22:19:58
【问题描述】:
我创建了两个结构
typedef struct node
{
struct node* left;
struct node* right;
int data;
} node;
typedef struct head
{
int count;
struct node* root;
} head;
这是我试图用来将数据插入树的函数。
int insert(struct node* root, int value)
{
node* newnode =(node*)malloc(sizeof(node));
newnode->data=value;
newnode->left=NULL;
newnode->right=NULL;
if(root==NULL)
{
root=newnode;
return 1;
}
if(value<root->data)
{
if(root->left==NULL)
{
root->left=newnode;
return 1;
}
else
{
return insert(root->left,value);
}
}
else if(value==root->data)
{
printf("data already exist\n");
free(newnode);
return 0;
}
else
{
if(root->right==NULL)
{
root->right=newnode;
return 1;
}
else
{
return insert(root->right,value);
}
}
}
当我操作时
head* BSThead=(head*)malloc(sizeof(head));
insert(BSThead->root,10);
可以看到insert函数成功进入第一个if,操作root=newnode;这行,可以看到它给出的地址。
但是当这个函数结束并且我回到主函数来访问它时 printf("%d",BSThead->root);
这一行只打印 0,我认为这意味着 BST->root 当前为空。
据我所知,malloc 函数创建的数据具有与正常值不同的函数范围。所以我想虽然 newnode 是在插入函数中创建的,但不会像普通变量一样在插入函数结束时被破坏,因此我可以在程序运行时一直使用它。
【问题讨论】:
-
您可能需要将指向根节点的指针传递给函数。或者您可以从函数返回新的根节点指针。 SO上有许多具有相同基本诊断的问题。但是,您还将未经检查的、未初始化的数据从
malloc()传递给函数,这也会导致很多麻烦。