我实现了自己的二叉树,这是我的节点结构:
struct node {
int value;
struct node *left;
struct node *right;
};
和我的开始节点:
struct node * start = NULL;
这是我的插入功能:
void insert(int value, struct node *leaf) {
if (leaf == NULL) {
leaf = (struct node*) malloc( sizeof( struct node ) );
leaf->value = value;
leaf->left = NULL;
leaf->right = NULL;
} else if (value < leaf->value) {
insert(value, leaf->left);
} else if (value > leaf->value) {
insert(value, leaf->right);
}
}
这是我用来访问树的函数:
void print_tree(struct node * leaf) {
if (leaf == NULL)
return;
print_tree(leaf->left);
printf(" %d ", leaf->value);
print_tree(leaf->right);
}
问题是,在插入所有值后,它什么都不打印。
答案 0 :(得分:1)
我假设您以这种方式调用插入内容:
leaf
问题在于,通过这种方式,您将NULL复制到插入函数的insert
局部变量中。
因此,如果您为节点分配内存,则不会更新开始指针。
为此,您需要在struct node ** leaf
函数(void insert(int value, struct node **leaf)
{
if( (*leaf) == NULL )
{
(*leaf) = malloc( sizeof( struct node ) ); // You don't need casting
(*leaf)->value = value;
(*leaf)->left = NULL;
(*leaf)->right = NULL;
}
else if(value < (*leaf)->value)
{
insert( value, &(*leaf)->left );
}
else if(value > (*leaf)->value)
{
insert( value, &(*leaf)->right );
}
}
)中使用双指针。
这应该有效:
UserVote