【问题标题】:c++ how to assign a pointer to a parent in a binary treec ++如何将指针分配给二叉树中的父级
【发布时间】:2013-05-17 01:17:08
【问题描述】:

我对如何初始化 m_parent 以指向子节点上方的节点感到困惑。

    class Node
{
public:
    Node(string city);
    ~Node();
    string m_city;
    int m_parent_distance;
    Node *m_left;
    Node *m_right;
    Node *m_parent;
};
Node *m_root;
//void test_print(string target, Node *cur_root);
Node * find_node(Node *m_root, string target);

这是节点构造函数

    Stree::Node::Node(string city)
{
    m_city = city;
    m_left = NULL;
    m_right = NULL;
    //what do i do with m_parent??
    m_parent_distance = 0;
}

【问题讨论】:

    标签: c++ pointers tree binary-tree parent


    【解决方案1】:

    将父级作为参数传递给您的构造函数,并从那里对其进行初始化:

    class Node
    {
    public:
        Node(string city, Node *parent);
        ~Node();
        string m_city;
        int m_parent_distance;
        Node *m_left;
        Node *m_right;
        Node *m_parent;
    };
    
    Stree::Node::Node(string city, Node *parent)
        : m_city(city),
          m_left(NULL),
          m_right(NULL),
          m_parent(parent),
          m_parent_distance(0)
    {
    }
    

    顺便说一句,您应该使用初始化列表(就像我上面写的那样)而不是构造函数中的赋值(就像您向我们展示的代码)。

    【讨论】:

    • 非常有帮助,谢谢,这让我想到了我可以在创建节点本身时初始化 m_parent 的事实。即 m_root->m_left = new Node(city2, m_root);您可以轻松地看到 m_root 成为父级!
    【解决方案2】:

    最自然的方法可能是添加一个方法AddChild(Node * child, bool left) 并在父级上调用它。这需要:

    • 在孩子中设置m_parent
    • 在父级中设置m_leftm_right

    替代方法可能是将parentleft 参数添加到子构造函数并在那里执行这些操作。

    【讨论】:

      【解决方案3】:

      正如其他人所提到的,您需要添加一个函数来将子节点添加到节点,同时设置子节点的父指针和父节点的左或右指针,或者创建一个显式设置父节点的构造函数.

      然而,这是在重新发明轮子。除非这是针对禁止使用标准库的学校作业,否则您可能应该使用std::mapstd::set

      【讨论】:

        猜你喜欢
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        • 2015-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多