查找非二叉树深度

时间:2017-03-30 13:49:54

标签: c#

我可以找到非二叉树深度。 每个节点都可以有多个子节点。我们不知道节点的最大数量是多少。

public class Node
{
    private List<Node> nodes;
    private string nodeName;

    public Node(string nodeName)
    {
        nodes = new List<Node>();
        this.nodeName = nodeName;
    }

    public List<Node> Nodes
    {
        get { return this.nodes; }
        set { this.nodes = value; }
    }

    protected string NodeName
    {
        get { return this.nodeName; }
    }
}

1 个答案:

答案 0 :(得分:4)

您可以执行以下操作来计算最大深度(包括根节点):

public static int Depth(Node root, int depth)
{
    int result = depth + 1;

    foreach (var node in root.Nodes)
        result = Math.Max(result, Depth(node, depth + 1));

    return result;
}

你会称它为0,传递初始深度:

int depth = Depth(root, 0);

如果您只想计算所有节点而不是深度:

public static int CountExcludingRoot(Node root)
{
    return root.Nodes.Sum(node => 1 + CountExcludingRoot(node));
}

(此排除根节点,因此您需要在返回的值中添加一个以获取包括根在内的所有节点的总数。