二进制树不起作用

时间:2017-04-23 14:37:51

标签: c binary-tree

我实现了自己的二叉树,这是我的节点结构:

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);
}

问题是,在插入所有值后,它什么都不打印。

1 个答案:

答案 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