Cで木構造をつくろうとしたが、ノードの値を上手く保存できていない
Cで木構造をつくるにあたって,
//ノード
struct tnode
{
struct tnode *left;
char *value;
struct tnode *right;
};
struct tnode *talloc(void)
{
return (struct tnode *)malloc(sizeof(struct tnode));
}
struct tnode *gentree(struct tnode *p, char *w)
{
if(p==NULL)
{
//端に来たら生成
p=talloc();
strcpy(p->value, w);
p->left = p->right = NULL;
}
else
{
//端じゃないなら左右にNULLまで走査
p->left = gentree(p->left, w);
p->right = gentree(p->right, w);
}
return p;
}
void main()
{
struct tnode *root;
root = NULL;
root=gentree(root, "aaa");
printf("%s\n", root->value);
putchar('\n');
root=gentree(root, "bbb");
printf("%s\n", root->value);
printf("%s\n", root->left->value);
printf("%s\n", root->right->value);
}
このようにして作成しようとしてます.
木の構造としては,aaaが2つのbbbに分岐してほしいのですが,実行結果は
aaa
bbb //aaaであってほしい
bbb
bbb
と,どこかでaaaがbbbに書き換えられてしまいます.試しに以下のように書き換えアドレスを確認したところ,2つのアドレスは同じでした.
root=gentree(root, "aaa");
printf("%d\n", root);
root=gentree(root, "bbb");
printf("%d\n", root);
初歩的なことかもしれませんが,どうかご回答お願いいたします.