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

Posted

技术标签:

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

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

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

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; 的力量问题。 ;-) 【参考方案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();
  

【讨论】:

谢谢,这正是我所需要的

以上是关于C ++在无序树中查找具有最高值的节点的主要内容,如果未能解决你的问题,请参考以下文章

使用C在搜索二叉树中查找最长路径

在 SML 中查找 2-3 树中的节点数

第五十三课 树中节点的查找操作

数据结构和算法-二叉查找树

C ++中的排名树

通过二分查找+位运算求完全二叉树的节点个数