[英]Recursive Binary tree insertion
所以我試圖使用這個遞歸函數將一個值插入到二叉樹中:
void add(node* *hd, int v){
node* curr = *hd;
if(curr == NULL){
curr = (node*)malloc(sizeof(node));
curr->value = v;
}else{
if(v < curr->value){
add(&curr->left, v);
}else{
add(&curr->right, v);
}
}
}
它似乎不起作用,我只是不明白為什么我不能做這樣的事情。 我將如何解決它?
您需要初始化指針,因為它們可能會被設置為您在分配空間時得到的任何值。 現在當你通過add(&curr->left, v);
curr->left
可能不是某個地方的指針,但它仍然不是NULL
;
void add(node* *hd, int v){
node* curr = *hd;
if(curr == NULL){
curr = malloc(sizeof(node));
curr->left = curr->right = NULL;
curr->value = v;
*hd = curr; // from Mohamed KALLEL
}else{
if(v < curr->value){
add(&curr->left, v);
}else{
add(&curr->right, v);
}
}
}
您的新節點沒有被正確“連接”,因為您只是將指針存儲在局部變量curr
中,而不是將其寫入*hd
以更改調用者的指針。
if(curr == NULL){
curr = malloc(sizeof(node));
curr->right = NULL;
curr->left = NULL; // From ks6g10 in order to initialize right and left to NULL
curr->value = v;
*hd = curr; // add this
}
順便說一句,使用calloc
而不是malloc
。 它將您的節點內存初始化為0
遞歸添加二叉樹的另一種方法可以像這樣完成:
node *add(node *hd, int v) {
node* curr = NULL;
if(!hd){
curr = malloc(sizeof(node));
curr->value = v;
curr->left = NULL;
curr->right = NULL;
return curr;
}
else {
if(v < curr->value)
curr->left = add(curr->left,v);
else
curr->right = add(curr->right,v);
}
return hd;
}
您需要用 NULL 初始化新形成的節點的左右指針,並讓您的 hd 指向該節點。
void add(node* *hd, int v){
node* curr = *hd;
if(curr == NULL){
curr = malloc(sizeof(node));
curr->value = v;
curr->left=curr->right=NULL;
*hd = curr;
}else{
if(v < curr->value){
add(&curr->left, v);
}else{
add(&curr->right, v);
}
}
}
我是這樣做的:
void insert(int data, node *&cur)
{
if (cur == NULL)
{
cur = (struct node*) malloc(sizeof(struct node));
cur->data = data;
cur->left = NULL;
cur->right = NULL;
}
else
{
if (data > cur->data)
{
insert(data, cur->right);
}
else
{
insert(data, cur->left);
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.