在 C# 中查找节点的深度

Mar*_*tin 2 c# algorithm binary-tree

我有一个未排序对象的列表。这些对象代表一棵二叉树。

对象列表:

new List<Object> 
{
    new { Id = 3, Left = /, Right = / }
    new { Id = 5, Left = /, Right = / }
    new { Id = 4, Left = 2, Right = 5 }
    new { Id = 2, Left = 1, Right = 3 }
    new { Id = 1, Left = /, Right = / }
}
Run Code Online (Sandbox Code Playgroud)

二叉树:

      4
    /  \
   2    5
  / \
 1  3
Run Code Online (Sandbox Code Playgroud)

我需要一个算法来找到这些节点中的任何一个的深度。我知道的唯一算法是深度优先搜索。这意味着我必须将对象列表转换为树。考虑到 .NET 没有明确的树数据结构,您将如何解决这个问题?我是否必须将数据结构转换为树(我真的不想编写所有代码)。还有其他算法吗?

Yur*_*ich 5

int nodeToFind = 2;
var currentNode = list.Single(n => n.Id == nodeToFind);
int depth = 0;
while ((currentNode = list
    .FirstOrDefault(i => i.Left == currentNode.Id || i.Right == currentNode.Id)) != null)

    depth++;
Console.WriteLine(depth);
Run Code Online (Sandbox Code Playgroud)

简单,但效率低下。