ich auf den Übungen hier arbeitet: „http://cslibrary.stanford.edu/110/BinaryTrees.html#s2“
ich eine Funktion geschrieben, die ein Baum entscheidet, ob ein BST (Rückkehr 1) oder nicht (0 zurückgeben), aber ich bin mir nicht sicher, ob mein Code total gut ist, ich habe ihn für einen BST und einen Nicht-BST-Baum getestet und es scheint korrekt zu funktionieren. Ich möchte die Meinung der Gemeinschaft wissen: Aktualisiert-Code:rekursive Funktion, wenn ein Baum erzählt, ist ein binärer Suchbaum (BST) (Modified-Code)
betrachten den Baum (kein BST):
5
/\
2 7
/\
1 6
Meine Idee ist 2 mit 5 zu vergleichen, wenn es gut ist, dann 1 mit 5, und wenn es gut ist, dann 6 mit 5, wenn es gut ist, dann 1 mit 2, wenn es gut ist, dann 6 mit 2, wenn es gut ist, dann 5 mit 7; Wenn es gut ist, gibt isBST() 1 zurück. Dieser Code soll es rekursiv tun.
der Knotenstruktur:
struct node {
int data;
struct node* left;
struct node* right;
};
der Code:
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;
}
}
das wirklich hier gepostet werden soll: http://codereview.stackexchange.com/ – Vic