长话短说,我被要求:
构建二叉搜索树T1
。
执行T1
的后序遍历,并在进行后序遍历时,将节点插入第二个二叉搜索树T2
我无法同时将这些值保存到T2
。我尝试了各种各样的方法,没有尝试过。我尝试过多次攻击它。我以为我可以在T2
中以某种方式创建main.cpp
,然后以某种方式从BST.cpp
输入后序搜索,但失败了。
不确定我是否可以从单独的.cpp
文件中调用和修改变量。
我希望也许你们中的一个可以给我建议。
我想我可以通过创建一个新数组将T1
的结果硬编码到main.cpp
中,但我的教授对于详细信息非常挑剔。
感谢您提供任何帮助或建议!
(我在代码中遗漏了与T2
有关的任何内容,因为它无法编译。)
的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 :(得分:0)
变量不存在于文件中,它们存在于范围中。
你基本上有三个解决方案:
1)在main
中声明t1
并将其作为输出参数传递给执行void BST::postOrderTraversal(BST& tree_to_build);
遍历的函数,例如
BST BST::postOrderTraveral();
2)在遍历函数中声明并构建第二个树并按值返回(可能涉及副本)。
main
3)(丑陋)在遍历函数中动态分配一个新树,并返回一个指向它的指针;该对象需要在BST* BST::postOrderTraversal();
中删除。
//Key Up
if(e.KeyCode==Keys.Up && (listBox.SelectedIndex - 1) > -1)
{
listBox.SelectedIndex--;
}
//Key Down
if (e.KeyCode==Keys.Down && (listBox.SelectedIndex + 1) < listBox.Items.Count)
{
listBox.SelectedIndex++;
}