如何使用递归查找父节点
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;
}
}
如果这不能解决您的问题。那么你的树中一定有一些循环。
我有一个 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;
}
}
如果这不能解决您的问题。那么你的树中一定有一些循环。