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));
    }
}



  主要功能包含树状结构,变量等初始化
  互动。


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倍大的树。问题似乎出在字符串中。在此先感谢大家。

最佳答案

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

关于c - Btree与指针,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32277190/

10-12 14:49