重载运算符>>以从二叉树中删除节点

时间:2019-07-29 14:46:38

标签: c++ operator-overloading binary-search-tree nodes

我有以下课程:

class Node 
{
private:
    char* m_key;
    Node* left;
    Node* right;

public:
    Node() : m_key(nullptr), left(nullptr), right(nullptr) {}

    Node(const char* key) 
    {
        this->m_key = new char[strlen(key) + 1];
        strcpy_s(this->m_key, strlen(key) + 1, key);

        left = nullptr;
        right = nullptr;
    }

    friend class BinSTree;
};
class BinSTree 
{
private:
    Node* root;
public:
    BinSTree() : root(nullptr) {}

    friend std::fstream& operator>>(std::fstream& in, Node* p);
    Node* deleteNode(Node* p, const char* key);

    ~BinSTree();
};

我想重载operator>>,所以当我执行以下代码时:

Node test("Key");
BinSTree bst;

bst>>test;

节点test从头开始被删除。问题是我无法从Node访问私有成员,也无法访问类BinSTree的成员。 BinSTree是一个包含二叉树根的类。Node是一个代表节点的类。

1 个答案:

答案 0 :(得分:1)

您无权访问BinSTree的成员,因为首先您的operator>>根本不对BinSTree进行操作-它对std::fstream&和{{ 1}}。

您的代码提供的功能是从Node*中“提取” Node*的功能-它与std::fstream毫无关系。

您想要的操作员的正确签名是

BinSTree

void operator>>(BinSTree& tree, Node* p)

(后者将允许您链接节点提取)。