将元素插入到c中的二叉树中

时间:2013-02-11 13:30:30

标签: c

我想问一个关于将元素插入二叉树的问题,我需要将元素插入表中。但是,我认为我误解了指针或其他东西,我无法创建二叉树。

insert函数由另一个包含main函数的文件调用,因此会定期调用insert函数,直到插入所有元素。然后,insert函数调用sub_insert以插入所有元素。当我试图读取二叉树时,它是空的。任何人都可以建议解决什么问题吗?

   typedef struct node * tree_ptr;
   /*typedef char* Key_Type; */

   struct node {
     Key_Type element; // only data is the key itself
     tree_ptr left, right;
     int depth;
   };

   struct table {
     tree_ptr head; // points to the head of the tree


   };
   struct table head,tail;



   struct node* newNode(Key_Type key){
      struct node* node=(struct node*)malloc(sizeof(struct node));
      node->element=key;
      node->left=NULL;
      node->right=NULL;
      return (node);
   }

   tree_ptr sub_insert(Key_Type key, struct node *node, Table table) {
      printf("reading... %s\n", key);

     if(node==NULL)
       return(newNode(key));

     else
     {
       if(key <= node->element){
         printf("inserted");
         node->left = sub_insert(key, node->left, table);
       }else{
         node->right = sub_insert(key, node->right, table);
       } 
         return node;
     }
   }

   Table insert(Key_Type key, Table table) {

        struct node* root=NULL;
        root=sub_insert(key, root, table);

        return table;
   }

2 个答案:

答案 0 :(得分:1)

就像Joachim所说,你的问题是你总是使用NULL作为根节点:

    struct node* root=NULL;
    root=sub_insert(key, root, table);

我猜,但似乎你想用table.head作为起始节点:

    root=sub_insert(key, table.head, table);

不知道表是否是指针,所以我只使用了点符号。

在任何情况下,在使用sub_insert()进行遍历之前,绝对需要一个有效的根节点,否则所有新节点都会在内存中悬空。

答案 1 :(得分:0)

让我们看一下insert函数:

Table insert(Key_Type key, Table table) {
    struct node* root=NULL;
    root=sub_insert(key, root, table);
    return table;
}

在此声明一个根节点,并在调用sub_insert时使用它。然后返回未知变量table,它在sub_insert中永远不会被修改。这意味着您刚创建的节点将丢失。