【问题标题】:C++ Find node with highest value in unordered treeC ++在无序树中查找具有最高值的节点
【发布时间】:2019-01-21 12:21:31
【问题描述】:

我尝试在stackoverflow上搜索这个问题,但找不到,如果它已经存在,请原谅。

所以,我想做的是创建一个遍历树并返回指向具有最高值的节点的指针的函数。树将是无序且不对称的,并且没有固定的深度。每个节点都有一个指向其父节点的指针、一个包含其子节点的列表和一个名为“值”的整数。树会有一个指向其根节点的指针,如下所示:

struct Node
{
private:
    Node* parent;
    list<Node> childs;
    int value;
public:
    // Getters, setters and constructors
}

struct Tree
{
private:
    Node* root;
public:
    // Getters, setters and constructors
}

而且,正如我之前所说,我希望创建一个遍历整个树的函数,也就是整个树中的每个节点,而不考虑深度,并返回一个指向具有最高值的节点的指针。我认为它需要递归,但我想不出办法。

如果我的问题看起来很愚蠢/愚蠢,请原谅我,但我真的需要帮助

【问题讨论】:

  • 看深度优先和广度优先的图遍历。
  • 这里的想法是实现一个Tree::iterator 类型,它允许遍历TreeNodes,然后在这个(和其他)上使用&lt;algorithm&gt; 的力量问题。 ;-)

标签: c++ algorithm tree


【解决方案1】:

可以使用递归方法,返回指向当前节点和子节点中最大值的节点的指针:

struct Node
{
...
  Node* getMaxNode()
  {
    Node* maxNode = this;
    for (auto& child : this->childs) {
      Node* childsMaxNode = child.getMaxNode();
      if (childsMaxNode->getValue() > maxNode->getValue())
        maxNode = childsMaxNode;
    }
    return maxNode;
  }
}

如果当前节点没有子节点,则返回指向当前节点的指针。因此,在struct Tree 中,您可以实现如下内容:

struct Tree
{
  Node* getMax()
  {
    return this->root->getMaxNode();
  }
}

【讨论】:

  • 谢谢,这正是我所需要的
猜你喜欢
  • 1970-01-01
  • 2023-03-16
  • 2020-07-24
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多