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?
codice:
#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(){
}
bst.h
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?
codice:
#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(){
}
in questo invece simo mi da
\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