【发布时间】:2014-05-30 08:28:22
【问题描述】:
我正在尝试使用递归插入函数创建二叉树,但我的根节点似乎一直在变化(如果没有,printf 应该始终在下面的代码中给出相同的输出)。关于如何解决这个问题的任何想法?
typedef struct Tnode{
char name[30];
int value;
struct Tnode *left;
struct Tnode *right;
} Tnode;
Tnode *insert(Tnode *node, char *name, int value){
if(node==NULL){
Tnode *temp = malloc(sizeof(struct Tnode));
sprintf(temp->name,"%s",name);
temp->value = value;
temp->left = NULL;
temp->right = NULL;
return temp;
}
else if(strcmp(name,node->name)<0)
{
node->left = insert(node->left, name, value);
}
else if(strcmp(name,node->name)>0)
{
node->right = insert(node->right, name, value);
}
else{
printf("something went wrong\n");
}
}
int main(){
Tnode *root = NULL;
root = insert(root,"george",11);
root = insert(root,"dick",12);
printf("%s\n",root->name);
root = insert(root,"walter",13);
root = insert(root,"harry",13);
printf("%s\n",root->name);
root = insert(root,"zink",40);
printf("%s\n",root->name);
}
【问题讨论】:
-
请给我们看看输出
-
你总是分配
root = insert(...),但是在第一次插入之后,这个调用不会返回任何东西。您需要通过递归调用将返回值传递回 main() 的初始调用 -
以上每一项都在换行符上
-
Pavel,你能提供一些语法吗?我不确定我明白你的意思
-
只需在函数末尾添加
return node;即可。
标签: c insert binary-tree