【问题标题】:How to get the depth如何获得深度
【发布时间】:2021-12-01 09:51:31
【问题描述】:

现在我有一个定义如下的节点类

class Node
{
    public int Value { get; set; }
    public List<Node> Nodes { get; set; }
}

和一个节点实例

Node r = new Node { Value = 1 };
Node n11 = new Node { Value = 2 };
Node n12 = new Node { Value = 3 };
Node n21 = new Node { Value = 4 };
Node n31 = new Node { Value = 5 };
r.Nodes = new List<Node> { n11, n12 };
n11.Nodes = new List<Node> { n21 };
n21.Nodes = new List<Node> { n31 };

如何获得最长路径(r -> n11 -> n21 -> n31)的长度(length = 4)?

【问题讨论】:

标签: c#


【解决方案1】:

使用迭代,只需要输入一个参数“节点”。

static int GetDepth(Node root)
{
    if (root == null)
        return 0;

    List<Node> list1 = new List<Node>();
    List<Node> list2 = new List<Node>();
    List<Node> temp;

    list1.Add(root);
    int depth = 1;

    while (true)
    {
        foreach (Node node in list1)
        {
            if(node.Nodes!= null && node.Nodes.Any())
            {
                foreach (Node n in node.Nodes)
                {
                    list2.Add(n);
                }
            }
        }

        if (list2.Any())
            depth++;
        else
            return depth;

        list1.Clear();
        temp = list1;
        list1 = list2;
        list2 = temp;
    }
}

【讨论】:

    【解决方案2】:

    使用递归函数

        public void FindDepth()
        {
            Node r = new Node { Value = 1 };
            Node n11 = new Node { Value = 2 };
            Node n12 = new Node { Value = 3 };
            Node n21 = new Node { Value = 4 };
            Node n31 = new Node { Value = 5 };
            r.Nodes = new List<Node> { n11, n12 };
            n11.Nodes = new List<Node> { n21 };
            n21.Nodes = new List<Node> { n31 };
    
            int depth = FindDepth(r,1);// here you got it. depth = 4
            
        }
    
        public int FindDepth(Node n, int depth)
        {
            if( n == null || n.Nodes == null )
            {
                return depth;
            }
    
            int maxDepth = 0;
            for(int i = 0; i < n.Nodes.Count;i++)
            {
                int d = FindDepth(n.Nodes[i], depth + 1);
                if(d > maxDepth)
                {
                    maxDepth = d;
                }
            }
    
            return maxDepth;
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多