Lange Rede kurzer Sinne, ich gebeten, mir zu werden:Verwenden/Erstellen/Ändern Variable aus separater CPP-Datei
einen binären Suchbaum Bauen,
T1
.Führen Sie eine Nachordnungsdurchquerung von
T1
und, während der Nachordnungsdurchquerung tun, um die Knoten in einen zweiten binären Suchbaum diese Werte inT2
zur gleichen Zeit zu sparenT2
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();
};
Ich glaube, Sie haben falsch verstanden „tun, um eine Nachordnungsdurchquerung“ als „den Baum in Postorder-Druck“. – molbdnilo
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