计算具有某些约束的树的节点的深度 C++.
Calculating depth of a node of a tree with certain constraints in C++
我有一棵树,里面有3个级别。有一个根节点,根节点有 3 个叶节点,所有 3 个叶节点都有 3 个其他叶节点。节点表示服务器。现在,我必须计算给定级别的节点深度。深度计算如下:
1)如果服务器(节点)在任何级别和任何列上都"向上",则该节点的深度为0。
2)如果服务器处于最后一个级别并且"关闭",则该节点的深度是无穷大。
3) 对于所有其他情况,节点的深度是其叶节点的最大深度 + 1。通过最大深度,它表示在其子节点中发生的多数值。
此处遵循自下而上的方法,因此,根节点的深度是级别 1 的深度。该电平作为程序中的输入参数。现在,我必须计算根节点的深度。
我对该程序做了一些假设:
1) 要查找子节点,请遵循父节点的子指针。
2)要找到给定级别中的所有节点,请从根到我到达该级别遍历子节点并列出它们。
3) 根据给定的约束分配值。
我不确定我的做法是否正确。请帮助我伙计们。谢谢。
我认为您想要以下伪代码:
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
的情况,这种情况就是没有多数情况的情况。
您需要在某处定义一个名为 Node
的struct
,如下所示:
struct Node {
Node(bool isUp, bool isLeaf);
bool isUp;
bool isLeaf;
std::Vector<Node> children = new std::Vector<Node>(3);
}
我希望这能回答你的问题,但可能是我解释错了。
相关文章:
- 反向给定链表中的K节点
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- Boost Graph Library,修复节点大小
- C++A*算法并不总是在路径中具有目标节点
- 如何找到2个单链表的公共节点
- 计算每个节点的树高,帮助我解释这个代码解决方案
- OpenGL在启用深度测试时不会丢弃我的碎片
- C++ - 如何找到 n 元树的给定节点的深度
- 通过深度优先搜索节点链接到自身进行倾倒.C++
- 使用深度第一次搜索的无向图中的图形调查无法实现的节点
- 查找二叉树中特定节点的深度
- 给定一个二叉树,设计一个算法,创建每个深度的所有节点的链表
- 显示属于二叉搜索树深度路径的节点
- 计算具有某些约束的树的节点的深度 C++.
- 使用节点的深度复制队列运行时错误
- C++Opencv:有没有一种方法可以获得节点的深度
- 获取当前节点的节点深度
- 二叉树中节点的深度
- 沿着名称路径行走以从节点获取深度值