stavo lavorando su esercizi qui: "http://cslibrary.stanford.edu/110/BinaryTrees.html#s2"
ho scritto una funzione che decide se un albero è un BST (ritorno 1) o no (return 0) ma non sono sicuro che il mio codice sia totalmente valido, l'ho testato per un BST e un albero non BST e sembra funzionare correttamente. Voglio conoscere il parere della comunità: codice aggiornato:funzione ricorsiva che dice se un albero è un Binary Search Albero (BST) (codice modificato)
considerano l'albero (non un BST):
5
/\
2 7
/\
1 6
la mia idea è quella di confrontare 2 con 5 se è buono, poi 1 con 5, e se va bene allora 6 con 5 se è buono allora 1 con 2 se è buono allora 6 con 2 se è buono allora 5 con 7; se è buono, BST() restituisce 1. questo codice dovrebbe farlo in modo ricorsivo.
la struttura del nodo:
struct node {
int data;
struct node* left;
struct node* right;
};
il codice:
int lisgood(struct node* n1,struct node* n2)
{
if(n2 == NULL)
return 1;
else{
int r = lisgood(n1,n2->left)*lisgood(n1,n2->right);
if(r){
if(n1->data >= n2->data)
{
return r;
}
else return 0;
}
else return r;
}
}
int risgood(struct node* n1,struct node* n2)
{
if(n2 == NULL)
return 1;
else{
int r = risgood(n1,n2->right)*risgood(n1,n2->left);
if(r){
if(n1->data < n2->data)
{
return r;
}
else return 0;
}
else return r;
}
}
int isBST(struct node* node)
{
if(node == NULL)
return 1;
else{
if(lisgood(node,node->left)&&risgood(node,node->right)){
return (isBST(node->left)&&isBST(node->right));
}
else return 0;
}
}
questo in realtà dovrebbe essere pubblicato qui: http://codereview.stackexchange.com/ – Vic