grazie,per array e liste daccordo,quello che mi manca è ad esempio "cercare i nodi dove il loro padre è >5"
Per farlo dovrei fare un ciclo per l' inserimento (quindi newnode?) e poi gestire i puntatori sull' albero.
Cosa che so fare su una lista,ma qui non so come impostare
Ho trovato questo codice ,può essere sulla strada di quello che devo fare,mi sembra,confermate?
bst.hcodice:#include<stdio.h> #include<stdlib.h> #include "bst.h" struct bst_node* new_node(void* data) { struct bst_node* result = malloc(sizeof(struct bst_node)); result->data = data; result->left = result->right = NULL; return result; } void free_node(struct bst_node* node) { free(node); } struct bst_node** search(struct bst_node** root, comparator compare, void* data) { struct bst_node** node = root; while (*node != NULL) { int compare_result = compare(data, (*node)->data); if (compare_result < 0) node = &(*node)->left; else if (compare_result > 0) node = &(*node)->right; else break; } return node; } void insert(struct bst_node** root, comparator compare, void* data) { struct bst_node** node = search(root, compare, data); if (*node == NULL) { *node = new_node(data); } } void delete(struct bst_node** node) { struct bst_node* old_node = *node; if ((*node)->left == NULL) { *node = (*node)->right; free_node(old_node); } else if ((*node)->right == NULL) { *node = (*node)->left; free_node(old_node); } else { struct bst_node** pred = &(*node)->left; while ((*pred)->right != NULL) { pred = &(*pred)->right; } /* Swap values */ void* temp = (*pred)->data; (*pred)->data = (*node)->data; (*node)->data = temp; delete(pred); } } main(){ }
codice:typedef int comparator(void* left, void* right); struct bst_node { void* data; struct bst_node* left; struct bst_node* right; }; struct bst_node* new_node(void* data); void free_node(struct bst_node* node); struct bst_node** search(struct bst_node** root, comparator compare, void* data); void insert(struct bst_node** root, comparator compare, void* data); void delete(struct bst_node** node);
Dal main però come invoco per creare?
In insert "comparator compare" cosa significa?
in questo invece simo mi dacodice:#include<stdio.h> #include<stdlib.h> struct node* NewNode(int data) { struct node* node = new(struct node); // "new" is like "malloc" node->data = data; node->left = NULL; node->right = NULL; return(node); } main(){ }
\alberi5.c||In function `NewNode':|
\alberi5.c|5|error: syntax error before "struct"|
\alberi5.c|6|error: dereferencing pointer to incomplete type|
\alberi5.c|7|error: dereferencing pointer to incomplete type|
\alberi5.c|8|error: dereferencing pointer to incomplete type|
||=== Build finished: 4 errors, 0 warnings ===|
Come aggiusto?Mi manca qualcosa per poi inserire il resto,questa soluzione mi sembra più "semplice" della prima
Grazie in anticipo

Rispondi quotando