0

我对如何初始化 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;
}
4

3 回答 3

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)
{
}

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

于 2013-05-17T01:24:44.433 回答
0

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

  • 放在m_parent孩子身上。
  • 设置m_leftm_right在父级中。

另一种方法可能是向子构造函数添加一个parentand参数并在那里执行这些操作。left

于 2013-05-17T01:24:22.283 回答
0

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

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

于 2013-05-17T01:32:08.407 回答