我尝试在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
}
而且,正如我之前所述,我希望创建一个遍历整个树的函数,也就是遍历整个树中的每个节点,而不管深度如何,并返回指向具有最高值的节点的指针。我认为这将需要递归,但我找不到解决方法。
如果我的问题看起来愚蠢/愚蠢,请原谅我,但我真的需要帮助
答案 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();
}
}