Похоже, что следующее близко к тому, что вы хотите.
Это рекурсивная функция insert()
, которая берет адрес узла и проверяет, следует ли добавить новый узел вдерево или взять ветку, чтобы продолжить поиск места для вставки узла.
Следует также учитывать, что если значение уже существует в дереве.В этом случае мы просто пропускаем его и предполагаем, что дерево должно содержать только уникальные значения.
Я не особо разбираюсь в знаниях о дереве, поэтому я не уверен, что это за двоичное дерево или прохождение, и т. Д.Я оставлю это на ваше усмотрение.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct node
{
int data;
struct node *right;
struct node *left;
} NODE;
void *insert(int ins, NODE **start)
{
if (*start == NULL)
{
NODE *newNode = malloc(sizeof(NODE));
newNode->data = ins;
newNode->left = NULL;
newNode->right = NULL;
(*start) = newNode;
}
else if (ins < (*start)->data)
{
insert(ins, &((*start)->left));
}
else if (ins > (*start)->data)
{
insert(ins, &((*start)->right));
}
// if we already have this value in the tree then we will do nothing
// and ignore it.
return *start;
}
void printTree(NODE *start)
{
// print tree
if (start->left) printTree(start->left);
printf("Element value %d\n", start->data);
if (start->right) printTree(start->right);
}
int main ()
{
int number;
NODE *phead = NULL;
number = 15;
insert(number, &phead);
// printf("prints the first element (head): %d", head.data);
number = 12;
insert(number, &phead);
// printf("should print the left branch : %d", head.left->data); // <- THIS DOES NOT SHOW UP
number = 22;
insert(number, &phead);
number = 48;
insert(number, &phead);
number = 33;
insert(number, &phead);
// try a duplicate node data.
number = 48;
insert(number, &phead);
printTree(phead);
return 0;
}
Сгенерированный вывод:
Element value 12
Element value 15
Element value 22
Element value 33
Element value 48