Ошибка вставки в двоичный указатель дерева

Код, приведенный ниже, является кодом, который я написал для вставки в двоичное дерево. Код работает для корневого узла, но не работает для его дочерних элементов. Я знаю, что мне нужно передать ссылку на корневой узел во время вставки в дочерние элементы, но я не знаю, как это реализовать. Что должно быть изменено?

#include <stdio.h>
#include <stdlib.h>

struct bintree
{
int data;
struct bintree *left;
struct bintree *right;
};

typedef struct bintree btree;

btree* newnode(btree *node, int data)
{
node=(btree*)malloc(sizeof(btree));
node->data=data;
node->left=NULL;
node->right=NULL;
return node;
}

btree* insert(btree *node, int data)
{
if(node==NULL)
{
return (newnode(node, data));
}
else
{
if(data<=node->data)
{
insert(node->left, data);
return(node);
}
else
{
insert(node->right, data);
return(node);
}
}
}

int main()
{
btree *root=NULL;
root=insert(root, 5);
insert(root, 3);
insert(root, 6);
return 0;
}

В этом коде узел, если он нулевой, отправляется newnode функция и назначается память и данные. В других случаях используется функция вставки.

1

Решение

Изменить это:

 if(data<=node->data)
{
insert(node->left, data);
return(node);
}
else
{
insert(node->right, data);
return(node);
}

чтобы:

    if(data<=node->data)
{
node->left = insert(node->left, data);
}
else
{
node->right = insert(node->right, data);
}
return (node);

также код в вашем главном должен быть:

root = insert(root, 5);
root = insert(root, 3);
root = insert(root, 6);
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]