创建链表

时间:2015-06-27 08:32:33

标签: c arrays linked-list binary-search-tree

我必须将每个级别的二叉搜索树的节点放在链表中。那就是如果树的高度是' h'然后' h + 1'将创建链接列表,然后每个链接列表将具有每个级别的所有节点。为此,我想到了创建一个链表列表。但是我想这些节点没有插入列表中。代码如下: -

struct node{ 
    int data;
    struct node *left;
    struct node *right;
    };

struct linked_list
{

    int data;
    struct linked_list *next;
};

    linkedlistofbst(struct node *new,struct linked_list *n1[], int level)
    {
    //printf("%d ",new->data);
    if(new==NULL)
    {
        return;
    }

    if(n1[level]==NULL)
    {
        struct linked_list *a =(struct linked_list *)malloc(sizeof(struct linked_list));
        a->data=new->data;
        a->next=NULL;
        n1[level]=a;
        printf("%d ",a->data);
    }
    else
    {
        struct linked_list *b =(struct linked_list *)malloc(sizeof(struct     linked_list));
        while(n1[level]->next!=NULL)
        {
            n1[level]=n1[level]->next;
        }
        b->data=new->data;
        b->next=NULL;
        n1[level]=b;
    }
    linkedlistofbst(new->left,n1,level+1);
    linkedlistofbst(new->right,n1,level+1);
    }

    main()

{
    struct linked_list *l=(struct linked_list *)malloc((a+1)*sizeof(struct    linked_list));//'a' is the height of the tree
    linkedlistofbst(new,&l, 0);//new is the pointer to the root node of the tree.
}

1 个答案:

答案 0 :(得分:1)

你是对的,第二个参数有问题,所以请执行以下操作

在主要内容中进行以下更改:

用于定义大小为a + 1的链表的数组并将其初始化为NULL

struct linked_list **l=(struct linked_list **)malloc((a+1)*sizeof(struct    linked_list*));
for(i=0;i<(a+1);++i)
    l[i]=NULL;

然后将方法调用为

linkedlistofbst(new,l, 0);

因此,您的方法必须看起来像

linkedlistofbst(struct node *new,struct linked_list **l, int level)

还在else中进行以下修改:

else
    {   
        struct linked_list *ptr=n1[level];
        while(ptr->next!=NULL)
        {
            ptr=ptr->next;
        }
        ptr->next=(struct linked_list *)malloc(sizeof(struct linked_list));
        ptr->next->data=new->data;
        ptr->next->next=NULL;        
    }