2016-06-22 7 views
0

ich Code versuche, aus der Höhe von binärer Suchanfrage wrotte unter dem Code tree.I zu finden:Finding Höhe von BST für jeden Knoten

int height(node *root) 
{ 
    if(root=NULL) 
    return -1; 

    int left=height(root->left); 
    int right=height(root->right); 
    return max(left,right)+1; 
} 

ich die Knoten 5,17,34 und 2 in den Baum eingefügt und hat die Funktion root to height übergeben. Unerwarteterweise wurde das Programm abgestürzt und ich musste das Fenster während der Windows-Fehlerberichterstattung erzwingen (ich versuchte es in einer IDE). Ich habe das auch in einem Online-Compiler ausprobiert, aber es zeigte auch einen Laufzeitfehler.

die Hauptfunktion:

int main() 
{ 
    node *root=new node(); 
    root=NULL; 
    root=insert(root,5); 
    root=insert(root,17); 
    root=insert(root,34); 
    root=insert(root,2); 
    int x=height(root); 
} 

die INSERT-Funktion, wenn im Fall, dass Sie betrachten es

 node *insert(node *root,int d) 
    { 
     if(root==NULL) 
     { 
     node *temp=new node(); 
     temp->data=d; 
     temp->left=temp->right=NULL; 
     root=temp; 

     } 
    else 
    { if(root->data>d) 
     { 
     root->left=insert(root->left,d); 
     } 
     else 
     root->right=insert(root->right,d); 
    } 
    return root; 
    } 

ich erwähnen möchte, dass das Problem nur dann gestartet, wenn ich versucht, die Höhe zu verwenden, Funktion im Programm.Vor diesem hatten alle anderen Funktionen kompiliert und erfolgreich ausgeführt.Ich habe versucht, Trockenlauf, aber kann nicht herausfinden, das Problem.

+1

Sie haben '=' anstelle von '==' verwendet. Voting zum Schließen als Tippfehler ([demo] (http://ideone.com/5VWlSc)). – dasblinkenlight

+0

Bei genauerer Betrachtung der Funktion ist der Wert, der an einen Knoten zurückgegeben wird, nicht seine eigene Höhe, sondern die Höhe seiner Unterknoten. Die wahre Höhe des Knotens kann nur dem übergeordneten Knoten bekannt sein, wenn die Funktion +1 zu dem Knoten hinzufügt Die Höhe von BST wird an die Hauptfunktion zurückgegeben, wenn +1 am Ende des letzten Funktionsaufrufs hinzugefügt wird. –

Antwort

0

Verwenden Sie die max-Funktion. Diese Funktion gibt die Höhe des längsten Pfads zurück, der die Höhe des Baums darstellen würde.

int main() 
{ 

    int num = height(root); 
    return 0; 
} 

int height (node * root) 
{ 
    if(!root) 
     return 0; 

    return max(height(root -> right), height(root -> left)) + 1; 
}