Estoy bastante nuevo en C y estoy tratando de implementar un árbol binario en C que almacenará un número y una cadena y luego imprimirlos por ejemplo,
1 : Bread
2 : WashingUpLiquid
etc.
El código que tengo hasta ahora es:
#include <stdio.h>
#include <stdlib.h>
#define LENGTH 300
struct node {
int data;
char * definition;
struct node *left;
struct node *right;
};
struct node *node_insert(struct node *p, int value, char * word);
void print_preorder(struct node *p);
int main(void) {
int i = 0;
int d = 0;
char def[LENGTH];
struct node *root = NULL;
for(i = 0; i < 2; i++)
{
printf(Please enter a number: \n);
scanf(%d, &d);
printf(Please enter a definition for this word:\n);
scanf(%s, def);
root = node_insert(root, d, def);
printf(%s\n, def);
}
printf(preorder : );
print_preorder(root);
printf(\n);
return 0;
}
struct node *node_insert(struct node *p, int value, char * word) {
struct node *tmp_one = NULL;
struct node *tmp_two = NULL;
if(p == NULL) {
p = (struct node *)malloc(sizeof(struct node));
p->data = value;
p->definition = word;
p->left = p->right = NULL;
}
else {
tmp_one = p;
while(tmp_one != NULL) {
tmp_two = tmp_one;
if(tmp_one->data > value)
tmp_one = tmp_one->left;
else
tmp_one = tmp_one->right;
}
if(tmp_two->data > value) {
tmp_two->left = (struct node *)malloc(sizeof(struct node));
tmp_two = tmp_two->left;
tmp_two->data = value;
tmp_two->definition = word;
tmp_two->left = tmp_two->right = NULL;
}
else {
tmp_two->right = (struct node *)malloc(sizeof(struct node));
tmp_two = tmp_two->right;
tmp_two->data = value;
tmp_two->definition = word;
tmp_two->left = tmp_two->right = NULL;
}
}
return(p);
}
void print_preorder(struct node *p) {
if(p != NULL) {
printf(%d : %s\n, p->data, p->definition);
print_preorder(p->left);
print_preorder(p->right);
}
}
Por el momento parece que funciona para los ints, pero la parte descriptiva sólo imprime hacia fuera para el último introducido. Asumo que tiene algo que ver con los punteros en la charmatriz, pero no he tenido suerte con su funcionamiento. Cualquier idea o consejo?













