0

几天前我对同一程序有疑问,但现在我遇到了一个新问题。我的导师告诉我需要重载赋值运算符以允许我的构造函数理解将一棵二叉树分配给另一棵二叉树。我尝试了几种不同的方法,但似乎无法获得正确的语法或想法。我花了一个小时在谷歌上四处挖掘,似乎找不到任何与我正在做的事情足够接近以真正帮助我的例子。他说话的方式,似乎让接线员超负荷就够了。网上的每个例子似乎都使用了重载和一个单独的函数。有什么想法吗?

这是我到目前为止所拥有的:

#ifndef BINARYTREE_H
#define BINARYTREE_H

using namespace std;
#include <cstdlib>
#include <iostream>

template <class Node_Type>
class BinaryTree 
{
public:
    BinaryTree();
    BinaryTree(Node_Type);
    BinaryTree(Node_Type, BinaryTree<Node_Type>, BinaryTree<Node_Type>);
    bool isEmpty();
    Node_Type info();
    Node_Type inOrder();
    Node_Type preOrder();
    Node_Type postOrder();
    const BinaryTree & operator=(const BinaryTree<Node_Type> & original);

private:
    struct Tree_Node
{
    Node_Type Node_Info;
    BinaryTree<Node_Type> *left;
    BinaryTree<Node_Type> *right;
};

Tree_Node *root;

};

template <class Node_Type>
BinaryTree<Node_Type>::BinaryTree() {

    root = NULL;

}

template <class Node_Type>
BinaryTree<Node_Type>::BinaryTree(Node_Type rootNode) {

    root = new Tree_Node;
    root->Node_Info = rootNode;
    root->left = NULL;
    root->right = NULL;

}

template <class Node_Type>
BinaryTree<Node_Type>::BinaryTree(Node_Type rootNode, BinaryTree<Node_Type> leftTree,                 BinaryTree<Node_Type> rightTree){

    root = new Tree_Node;
    root->Node_Info = rootNode;

    root->left =  &leftTree;
    root->right =  &rightTree;

}

template <class Node_Type>
bool BinaryTree<Node_Type>::isEmpty(){

    if (root == NULL)
    return true;   
}

template <class Node_Type>
Node_Type BinaryTree<Node_Type>::info(){

        return root->Node_Info;

}

template <class Node_Type>
Node_Type BinaryTree<Node_Type>::inOrder(){

    if (root->left != NULL)
        root->left->inOrder();
    cout << root->Node_Info;
    if (root->right != NULL)
        root->right->inOrder();

}

template <class Node_Type>
Node_Type BinaryTree<Node_Type>::preOrder(){

    cout << root->Node_Info;
    if (root->left != NULL)
        root->left->preOrder();
    if (root->right != NULL)
        root->right->preOrder();

}

template <class Node_Type>
Node_Type BinaryTree<Node_Type>::postOrder(){


    if (root->left != NULL)
        root->left->postOrder();
    if (root->right != NULL)
        root->right->postOrder();
    cout << root->Node_Info;
}

template <class Node_Type>
const BinaryTree<Node_Type> & BinaryTree<Node_Type>::operator =(const BinaryTree<Node_Type>& original){

    root = new Tree_Node;
    root->Node_Info = original.info();

    root->left = original->root->left;
    root->right = original->root->right;

    return *this;

}


#endif  /* BINARY_TREE_H */

我知道这里可能存在根本性错误。我只是对 C++ 了解不够,无法真正解决问题。上学期我在指针和动态内存方面的经验有限。对不起,如果我把事情搞砸了。谢谢你的帮助!

4

1 回答 1

0

您对分配的覆盖是浅拷贝的定义:

root->left = original->root->left;
root->right = original->root->right;

深拷贝将在整个树中创建新节点。(需要遍历)

在每个节点级别下都有“树”似乎也令人困惑,所以你有“树->左->树->右->树->右”而不仅仅是“根->左->右- >正确”。这会让我很快感到困惑。

于 2013-09-23T21:26:32.690 回答