0

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

插入函数由另一个包含主函数的文件调用,因此插入函数会定期调用,直到插入所有元素。然后 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;
   }
4

2 回答 2

1

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

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

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

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

不知道 table 是否是指针,所以我只是使用了点表示法。

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

于 2013-02-11T14:47:28.137 回答
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. 这意味着您刚刚创建的节点丢失了。

于 2013-02-11T13:36:35.507 回答