如何使用递归查找父节点

How to find a parent node using recursion

我有一个 class 这样的:

public class Entity
{
    public Entity()
{
    ChildEntities = new List<Entity>();
}
    public int Name { get; set; }
    public string ParentNode { get; set; }
    public string Level { get; set; } //Level it is in the tree

    public List<Entity> ChildEntities { get; set; }
}

我有一个实体列表,我需要将每个实体添加到其父实体集合中。为此,我尝试编写一个递归函数来查找父节点并 return 它。它看起来像这样:

//Recursively find the parent node 
            Entity findParent(Entity rootEntity)
            {
                foreach (var entity in primaryEntity.ChildEntities)
                {
                    var foundParent = false;
                    if (entity.EntityName == rootEntity.ImmediateParent)
                    {
                        return entity;
                    }
                    if (entity.ChildEntities.Count != 0)
                    {
                        findParent(entity);
                    }
                }
                return null;
            }

我一直收到堆栈溢出异常。这个练习的最佳实践是什么?我应该怎么做?

你的实现没问题,除非你应该在你的第二个 if 中返回:

if (entity.ChildEntities.Count != 0)
{
   var parent = findParent(entity); // <- here
   if(parent != null){
     return parent;
   }
}

如果这不能解决您的问题。那么你的树中一定有一些循环。