二叉树,我哪里错了?

时间:2016-01-15 11:31:04

标签: c pointers binary-tree

这在某个地方似乎是错误的,可能是内存分配或指针(最有可能),我做错了什么?

我在创建除第一个节点以外的新节点时收到错误。错误不明确。

由于

#include <stdio.h>
#include <stdlib.h>

struct binary_tree{
    int data;
    struct binary_tree *leftnode;
    struct binary_tree *rightnode;
};

void create_node(struct binary_tree *node , int input)
{
    struct binary_tree *new_node;

    new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));

    new_node->data      = input;
    new_node->leftnode  = NULL;
    new_node->rightnode = NULL;

    node = new_node;
}

void LNR_traversal(struct binary_tree *node)
{
    while(!(node->leftnode== NULL && node ->rightnode==NULL))
    {
        if(node->leftnode!=NULL)
            LNR_traversal(node->leftnode);
        printf("%d",node->data);
        if(node->rightnode!=NULL)
            LNR_traversal(node->rightnode);
    }

}

int main()
{
    int i;
    int input;

    struct binary_tree *start;
    struct binary_tree *node;

    printf("Data:");
    scanf("%d",&input);
    create_node(start,input);

    //node = start;

    printf("\nDATA:");
    scanf("%d",&input);

    while(input!=-1)
    {
        node = start;

        if(node->leftnode == NULL){
            create_node(node->leftnode,input);
            printf("1");
        }
        else if(node->rightnode == NULL)
            create_node(node->rightnode,input);
        else if(node->leftnode != NULL && node->rightnode!=NULL){
            node = node->leftnode;
            node = node->rightnode;
        }
        printf("\nDATA:");
        scanf("%d",&input);
    }
    node=start;

    LNR_traversal(start);
    return 0;
}

2 个答案:

答案 0 :(得分:3)

在C中的函数调用中,参数按值传递。这意味着参数被复制作为参数,因此在callee中修改参数不会影响调用者中的变量。

使用指针修改被调用者中的调用者局部变量。

在这种情况下,我认为从create_node()返回已分配的节点并让调用者分配返回值比使用指针修改变量更好。

答案 1 :(得分:0)

问题依赖于create_node功能。

代码:

struct binary_tree *new_node;

new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));
if ( node ==NULL ) {
    new_node->data      = input;
    new_node->leftnode  = NULL;
    new_node->rightnode = NULL;

    node = new_node;
}
else if (input < node->data) {
    create_node(node->left,input);
}
else {
    create_node(node->right,input);
}
}

实际上这是二进制排序树

这种方式当您想要向树中添加内容时,只需使用:

create_node(root_node,value);