2016-10-03 14 views
-1

Ich war ein binären Suchbaum für meine Hausaufgaben zu machen, aber es wird keine Ausgabe für Inorder zeigt, Preorder und Postorder. Obwohl ich cout in den inorderpreorder und postorder Funktionen verwende, gibt es mir keine Ausgabe. Der Fehler, den ich fühle, ist in createBst Funktion noch ich es nicht sicher bin ... mir freundlicherweise helfen Sie :-)binärer Suchbaum: keine Ausgabe

Vielen Dank im Voraus hat
#include <iostream> 

using namespace std; 

struct node 
{ 
    int info; 
    struct node *left; 
    struct node *right; 
}*r; 
struct node * createBst(struct node *r, int val) 
{ 

    if (r == NULL) 
    { 
     r = new node; 
     r->info = val; 
     r->left = NULL; 
     r->right = NULL; 
    } 
    else if (val <= r->info) 
    { 
     // cout<<r->left<<" "; 
     r->left = createBst(r->left, val); 

    } 
    else 
    { 
     r->right = createBst(r->right, val); 
     cout << r->right << " "; 
    } 
    return r; 
} 

void inOrder(struct node *r) 
{ 
    if (r != NULL) 
    { 
     inOrder(r->left); 
     cout << r->info; 
     inOrder(r->right); 
    } 
} 

void preOrder(struct node *r) 
{ 
    if (r != NULL) 
    { 
     cout << r->info; 
     preOrder(r->left); 
     preOrder(r->right); 
    } 
} 

void postOrder(struct node *r) 
{ 
    if (r != NULL) 
    { 
     postOrder(r->left); 
     postOrder(r->right); 
     cout << r->info; 
    } 
} 

int main() 
{ 
    r = NULL; 
    int n, val; 
    cout << "Enter the number of element" << endl; 
    cin >> n; 
    for (int i = 0; i < n; i++) 
    { 
     cin >> val; 
     //cout<<"check"; 
     createBst(r, val); 
    } 
    cout << "Inorder" << endl; 
    //cout<<r->info<<endl; 
    inOrder(r); 
    cout << endl; 
    cout << "PreOrder" << endl; 
    preOrder(r); 
    cout << endl; 
    cout << "PostOrder" << endl; 
    postOrder(r); 
    cout << endl; 
} 
+0

_Keine Ausgabe ausgeben_. Dies ist eine ziemlich vage Aussage. Erhalten Sie Fehler beim Kompilieren? Was ist IDE, verwenden Sie, um dies zu kompilieren? –

Antwort

1

In

createBst(r, val); 

OP die nicht empfangen aktualisiert r zurück, da die automatische Variable r in

struct node * createBst(struct node *r, int val) 

ist nicht das gleiche wie r

struct node 
{ 
    int info; 
    struct node *left; 
    struct node *right; 
}*r; 

Dies kann mit

r = createBst(r, val); 

oder durch Änderung der

struct node * createBst(struct node *r, int val) 

den Zeiger durch Bezug zu nehmen fixiert werden.

struct node * createBst(struct node * & r, int val) 

Off Thema hat OP selbst für einige urkomischen Compiler und logischen Fehler mit r als globalem Variable einrichten und dann die Variablennamen mit r extensiv als automatischem Variable in ihren Funktionen. Ein Tippfehler und eine saubere "Variable r nicht definiert" Nachricht kann viel unordentlicher werden.

Und weil nicht erklären, wie das macht mir einen egoistischen Bastard zu beheben, die gerade hier zu verhöhnen "teh noobz" verliert die *r hier:

struct node 
{ 
    int info; 
    struct node *left; 
    struct node *right; 
}*r; 

und

node * r; 

an denen erklären Spitze von main. Am Ende von main empfehle ich dringend die Iteration durch die BST und delete in alle Knoten, um das Speicherleck zu verhindern. Ich bin genug eines sadistischen Folterers, um das nicht zu erklären.

+0

@ShaantamAnand Lesen Sie die [** help tour **] (https://stackoverflow.com/tour) und beschreiben Sie, wie Sie diese Website nutzen können. Korrekte Antworten werden durch Up-Ticks und Antwort-Auswahl gutgeschrieben, von denen Sie beide nicht haben. Wenn Sie weiterhin keinen Kredit geben, wo es fällig ist, werden die Leute einfach aufhören, auf Ihre Fragen zu antworten. – WhozCraig