我在开始时将root初始化为NULL,同样将转到第一个插入函数。因为我已经发送了root的地址,所以它应该被更改,但它不会,再次在第二个插入语句中,root的NULL vakue将进入insert函数。
请告诉我,我错过了。
#include <stdio.h>
#include <stdlib.h>
typedef struct bst{
struct bst *left;
int data;
struct bst *right;
}bst_t;
void insert(struct bst**, int);
void print(struct bst*);
int main() {
struct bst *root;
root = NULL;
insert(&root, 45);
insert(&root, 75);
insert(&root, 5);
insert(&root, 76);
insert(&root, 25);
insert(&root, 56);
insert(&root, 89);
insert(&root, 99);
insert(&root, 98);
print(root);
printf("Print Any Char...\n");
getch();
return 0;
}
void insert(struct bst **root, int num)
{
struct bst *node = *root;
if(node == NULL)
{
node = (struct bst*)malloc(sizeof(struct bst));
node->left = NULL;
node->data = num;
node->right = NULL;
return;
}
else
{
if(num < node->data)
{
insert(&(node->left), num);
}
else
{
insert(&(node->right), num);
}
}
return;
}
void print(struct bst *root)
{
struct bst *temp = root;
if(temp != NULL)
{
printf("%d --> ", temp->data);
print(temp->left);
print(temp->right);
}
else
return;
}
答案 0 :(得分:1)
您制作根指针的本地副本:
struct bst *node = *root;
然后你可以修改它:
node = (struct bst*)malloc(sizeof(struct bst));
不幸的是,您不会将此更改传播回调用方,因此更改将丢失:(
尝试:
*root=node;
最后。
我强烈怀疑这是@一些程序员在他的评论中暗示的那样:)