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