计算具有某些约束的树的节点的深度 C++.

Calculating depth of a node of a tree with certain constraints in C++

本文关键字:节点 深度 C++ 约束 计算      更新时间:2023-10-16

我有一棵树,里面有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的情况,这种情况就是没有多数情况的情况。

您需要在某处定义一个名为 Nodestruct,如下所示:

struct Node {
    Node(bool isUp, bool isLeaf);
    bool isUp;
    bool isLeaf;
    std::Vector<Node> children = new std::Vector<Node>(3);
}

我希望这能回答你的问题,但可能是我解释错了。