我有一棵树,其中有3个等级。存在根节点,根节点具有3个叶节点,并且所有3个叶节点具有3个其他叶节点。节点代表服务器。现在,我必须计算给定级别的节点深度。深度计算如下:
1)如果服务器(节点)在任何级别和任何列都“向上”,则该节点的深度为0.
2)如果服务器处于最后一级并且处于“关闭”状态,则该节点的深度为无穷大。
3)对于所有其他情况,节点的深度是它的叶节点的最大深度+ 1.通过最大深度,它表示在其子节点中发生的多数值。
此处遵循自下而上的方法,因此,根节点的深度是级别1的深度。级别被视为程序中的输入参数。现在,我必须计算根节点的深度。
我对该计划做了一些假设:
1)要查找子节点,请遵循父节点的子指针。
2)要查找给定级别中的所有节点,请从根遍历子节点,直到达到该级别并列出它们。
3)根据给定的约束条件分配值。
我不确定我的方法是否正确。请帮帮我们。谢谢。
答案 0 :(得分:0)
我认为你想要下面的伪代码:
int nodeStatus(const Node& n) {
int status = 0;
if (n.isUp)
return 1;
else if (n.isLeaf)
return -1;
else {
for (Node child : n.children)
status += nodeStatus(child);
}
if (status > 0)
return 1;
else
return -1;
}
这是一种递归方法。它首先检查节点是否已启动,在这种情况下它返回1.然后,如果节点已关闭且是叶子,则返回-1,因为这是没有子节点的故障。最后,如果n
是一个中间节点,那么它会为所有子节点再次递归调用此方法,并对结果求和。最后的if
语句然后测试大多数孩子是否被归类为1或-1并相应地返回该值。请注意,通过使用值1
和-1
,可以只对孩子求和并为每个节点提供明确的3
(或奇数个)节点,那么就永远不会有status == 0
的情况,即没有多数情况的情况。
您需要在某处定义名为struct
的{{1}},如下所示:
Node
我希望这可以回答你的问题,但可能是我错误地解释了它。