Btree与指针

时间:2015-08-28 18:02:08

标签: c pointers b-tree

typedef struct T{ //Main struct of the nodes
     char *value;    //String view like a pointer                                      
     struct T *T_l, *T_r;  //Pointers left and right                                                                                  
}*tree, dim; 

tree mergetree(char *el, tree t1, tree t2){ // Merging sub-btree

     tree t0 = (tree)malloc(sizeof(dim));// Create a struct for merge the sub-btree
     t0->T_l = t1;
     t0->T_r = t2;
     t0->value = el;
     return(t0);
}
tree createleaf(char *el){ //New leaf calling the mergetree function
     return mergetree(el, NULL, NULL);                  

}
int isvoidtree(tree t){ // Checking if the tree is void or not
     return (t == NULL);                                 

}

char *root(tree t){ //Return value of the node

    return t->value;
}

tree leftchild(tree t){ // Return pointer of the node

     return t->T_l;
}
tree rightchild(tree t){ // Return pointer of the node

     return t->T_r;
}

tree insert(char *el, tree t){ //Insert the new element calling specific functions

    if(isvoidtree(t))                                  

        return createleaf(el);
   if (strcmp(root(t), el)>=0)      //Left side                           

       return mergetree(root(t), insert(el, leftchild(t)), rightchild(t)); 
    if (strcmp(root(t),el)<0)  //Right side
             return mergetree(root(t), leftchild(t), insert(el, rightchild(t)));  
    else return t;
}

void showtree(tree t){ //Show recursively the root of all sub-btree
    int i;
    if (isvoidtree(t) == false){ // if the tree is not null the start of recursive calls start
            showtree(leftchild(t));
            printf("%s\n", root(t));
            showtree(rightchild(t));
    }
}
  

main函数包含树结构,变量等初始化   相互作用。

int main(int argc, char** argv) {
    int N,i;  
    char el[20];
    tree btree = NULL;  //init btree
    printf("Size:\n");
    scanf("%d",&N);
    for(i=0;i<N;i++){
    printf("Insert name:\n");
    scanf("%s",el);

    btree = insert(el,btree);}

    showtree(btree); //Output btree

    return (EXIT_SUCCESS);
}

您好。以上是我的代码。我遇到串联问题 树木左右。输出我总是得到最后一个节点 迭代N次树有多大。问题似乎在字符串中。先谢谢你们。

1 个答案:

答案 0 :(得分:0)

您将每个名称读入同一个数组;因此,树的每个元素都指向相同的字符串,该字符串包含输入的姓氏。正如您为每个新节点分配空间(但无法释放您不再使用的空间,唉),您需要为每个名称分配空间。