我想问一个关于将元素插入二叉树的问题,我需要将元素插入表中。但是,我认为我误解了指针或其他东西,我无法创建二叉树。
insert函数由另一个包含main函数的文件调用,因此会定期调用insert函数,直到插入所有元素。然后,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;
}
答案 0 :(得分:1)
就像Joachim所说,你的问题是你总是使用NULL作为根节点:
struct node* root=NULL;
root=sub_insert(key, root, table);
我猜,但似乎你想用table.head作为起始节点:
root=sub_insert(key, table.head, table);
不知道表是否是指针,所以我只使用了点符号。
在任何情况下,在使用sub_insert()进行遍历之前,绝对需要一个有效的根节点,否则所有新节点都会在内存中悬空。
答案 1 :(得分: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
中永远不会被修改。这意味着您刚创建的节点将丢失。