在单独的.cpp文件中使用/ create / modify变量

时间:2017-05-03 04:27:12

标签: c++ binary-search-tree

长话短说,我被要求:

  1. 构建二叉搜索树T1

  2. 执行T1的后序遍历,并在进行后序遍历时,将节点插入第二个二叉搜索树T2

  3. 我无法同时将这些值保存到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();
    
    };
    

1 个答案:

答案 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++;
        }