2017-05-03 5 views
-2

Lange Rede kurzer Sinne, ich gebeten, mir zu werden:Verwenden/Erstellen/Ändern Variable aus separater CPP-Datei

  1. einen binären Suchbaum Bauen, T1.

  2. Führen Sie eine Nachordnungsdurchquerung von T1 und, während der Nachordnungsdurchquerung tun, um die Knoten in einen zweiten binären Suchbaum diese Werte in T2 zur gleichen Zeit zu sparen T2

Ich habe Probleme ein. Ich habe verschiedene Wege und nichts ausprobiert. Ich habe versucht, es auf viele Arten anzugreifen. Ich dachte, ich könnte irgendwie T2 in main.cpp erstellen, dann irgendwie die Postorder-Suche aus dem BST.cpp eingeben, aber haben gescheitert.

Nicht sicher, ob ich eine Variable von einer separaten .cpp Dateien aufrufen und ändern kann.

Ich hatte gehofft, vielleicht kann einer von euch mir einen Rat geben.

Ich dachte, ich kann nur das Ergebnis von T1 in main.cpp hartcodieren, indem Sie ein neues Array erstellen, aber mein Professor ist sehr wählerisch auf folgende Details.

Vielen Dank für jede Hilfe oder Beratung!

(Ich habe mit etwas ausgelassen mit T2 im Code zu tun, da es nicht kompilieren würde.)

main.cpp

int main() { 

int TreeKeys[10] = {50, 76 ,21 , 4, 32, 64, 15, 52, 14, 88}; 
BST T1; 
BST T2; 

cout << "Printing T1 before inputing values:\n"; 

T1.PrintInOrder(); 


for (int i = 0; i < 10; i++) 
{ 
    T1.AddLeaf(TreeKeys[i]); 
} 

cout << "****************" << endl; 

cout << "Printing T1 in PostOrder:" << endl; 
T1.printPostOrder(); 
cout << endl; 

return 0; 
} 

BST.cpp

BST::BST(){ 
root = NULL; 
} 

BST::node* BST::CreateLeaf(int key){ 
node* n = new node; 
n->key = key; 
n->left = NULL; 
n->right = NULL; 

return n; 
} 

void BST::AddLeaf(int key) 
{ 
AddLeafPrivate(key, root); 
} 

void BST::AddLeafPrivate(int key, node* Ptr) 
{ 
if(root == NULL) 
{ 
    root = CreateLeaf(key); 
} 

else if(key < Ptr->key) 
{ 
    if(Ptr->left != NULL) 
    { 
     AddLeafPrivate(key, Ptr->left); 
    } 
    else 
    { 
     Ptr->left = CreateLeaf(key); 
    } 
} 

else if(key > Ptr->key) 
{ 
    if(Ptr->right != NULL) 
    { 
     AddLeafPrivate(key, Ptr->right); 
    } 
    else 
    { 
     Ptr->right = CreateLeaf(key); 
    } 
} 
else 
{ 
    cout<< "The key" << key << "has already been added to the tree\n"; 
} 
} 

void BST::PrintInOrder() 
{ 
PrintInOrderPrivate(root); 
} 


//*************************** 
void BST:: printPostOrder() 
{ 
printPostOrderPrivate(root); 
} 

void BST:: printPostOrderPrivate(node* Ptr) 
{ 
if(root == NULL) 
{ 
    cout << "Tree is empty" << endl; 
    return; 
} 
if (Ptr != NULL) 
{ 
    printPostOrderPrivate(Ptr-> left); 
    printPostOrderPrivate(Ptr->right); 
    cout << Ptr->key << " "; 
    } 
} 

BST.h

class BST 
{ 
private: 

struct node 
{ 
    int key; 
    node* left; 
    node* right; 
}; 

node* root; 

void AddLeafPrivate(int key, node* Ptr); 
void PrintInOrderPrivate(node* Ptr); 
void printPostOrderPrivate(node* Ptr); 
void printPreOrderPrivate(node* Ptr); 

public: 

BST(); 
node* CreateLeaf(int key); 
void AddLeaf(int key); 
void PrintInOrder(); 
void printPostOrder(); 
void printPreOrder(); 

}; 
+0

Ich glaube, Sie haben falsch verstanden „tun, um eine Nachordnungsdurchquerung“ als „den Baum in Postorder-Druck“. – molbdnilo

+0

Sie haben Recht, aber der Druck sollte mir helfen. Durch Drucken kann ich bestätigen, dass ich die Postorder richtig gemacht habe. Aber ich war nicht in der Lage, da ich nicht sicher bin, wie man die Knoten zum T2 hinzufügt. – cisco

Antwort

0

Variablen existieren nicht in Dateien, sie existieren in Scopes.

Sie haben grundsätzlich drei Lösungen:

1) festzustellen, in t2main und es als Ausgabeparameter an die Funktion übergeben, die die t1 Traversierung der Fall ist, z.B.

void BST::postOrderTraversal(BST& tree_to_build); 

2) festsetzen und den zweiten Baum in der Traversierung Funktion bauen und als Wert zurückgeben (eine Kopie beinhalten).

BST BST::postOrderTraveral(); 

3) (hässliche) Dyamically einen neuen Baum in der Traversierung Funktion zuzuordnen, und gibt einen Zeiger auf mich; Das Objekt muss in main gelöscht werden.

BST* BST::postOrderTraversal(); 
Verwandte Themen