2017-04-23 128 views
-1

我实现我自己的二叉树的打印,这是我的节点结构:二叉树不起作用

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

你在这里缺少一个逗号:'插入(价值叶子 - >左);' –

+0

你可能想搜索并阅读*由C基准模拟通*。 –

+0

@BenSteffan这只是一个类型错误,无论如何。 –

回答

1

我假设你正在调用以这种方式插入:

insert(5, start); 

的问题是,这种方式要复制NULL到插入功能的leaf局部变量。

因此,如果您正在为节点分配内存,则不会更新开始指针。

为了做到这一点,您需要在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); 
    } 
} 
+0

感谢它的工作原理 –