Ich versuche, Baum in C zu implementieren, aber die Sache ist, wenn ich versuche, es zu durchlaufen, zeigt es nur die ersten drei Knoten des Baumes und der Rest sind verloren. wie, wenn ich eingeben 100, 200, 300, 400, 500, 600, 700 dann nur 100, 200, 300 wird in der Ausgabe sein. Ich denke, das Problem ist mit Funktion einfügen, aber ich kann es einfach nicht herausfinden.Binary Tree Implementierung auf C
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *prev;
struct node *next;
};
typedef struct node list;
list *head, *tail, *current, *newn;
void inorder(struct node *t)
{
if(t != NULL)
{
inorder(t->prev);
printf("%d->",t->data);
inorder(t->next);
}
}
struct node * insert(int key, struct node *t)
{
if(t == NULL)
{
t = (list*)malloc(sizeof(list));
t->data = key;
t->prev = NULL;
t->next = NULL;
}
else if(t->prev == NULL)
{
t->prev = insert(key,t->prev);
}
else if(t->next == NULL)
{
t->next = insert(key,t->next);
}
return(t);
}
int main()
{
int x=1, y, z=1;
current = (list*)malloc(sizeof(list));
printf("Enter data:");
scanf("%d",¤t->data);
current->next = NULL;
current->prev = NULL;
head = current;
while(z == 1)
{
printf("Enter data:");
scanf("%d",&y);
current = insert(y,current);
printf("want to insert more:");
scanf("%d",&z);
}
printf("\nInorder Traversal:");
newn = head;
inorder(newn);
}
Scanf (vor allem ohne den Rückgabewert Überprüfung) ist gefährlich (http://sekrit.de/webdocs/c/beginners-guide-away-from-scanf.html). Versuchen Sie ein Experiment, indem Sie zehn Knotenwerte fest codieren, anstatt scanf für sie zu verwenden. Andernfalls (mit @lurker einverstanden) https://ericlippert.com/2014/03/05/how-to-debug-small-programs/ und https://stackoverflow.com/questions/2069367/how-to-debug- using-gdb – Yunnosch
Ihr 'insert' wird nicht hinzugefügt, wenn' root' zwei nicht-'NULL' untergeordnete Elemente enthält. – BLUEPIXY
@BLUEPIXY wie kann ich das tun? – TrustTyler