C ++在无序树中查找具有最高值的节点

时间:2019-01-21 12:21:32

标签: c++ algorithm tree

我尝试在stackoverflow上搜索此问题,但找不到它,请原谅我是否已经存在。

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

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
}

而且,正如我之前所述,我希望创建一个遍历整个树的函数,也就是遍历整个树中的每个节点,而不管深度如何,并返回指向具有最高值的节点的指针。我认为这将需要递归,但我找不到解决方法。

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

1 个答案:

答案 0 :(得分:0)

您可以使用递归方法,该方法将指针返回具有当前和子节点最大值的节点:

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();
  }
}