[英]Need help on tree like structure data retrieval
我有一个类型为HierarchyNode的“高级对象”,它将具有相同类型的HierarchyNode的子节点(每个子节点可能有其子节点)。
我应该从“上级对象”读取请求的父节点的子节点。 所以我的代码如下(调用方-SuperiorObject.IdentifySubNodeOfRequestedNode(...))。 但是,即使执行了循环,并且也并非所有代码返回值都异常,但是stopRecursiveCall在foreach循环中为false。 如何解决这个问题并返回子节点,或者还有其他更好的解决方案? 谢谢
public List<HierarchyNode> IdentifySubNodeOfRequestedNode(int reqstedId, Boolean stopRecursiveCall)
{
if (this.UserId == reqstedId)
{
stopRecursiveCall = true;
return this.ChildNodes;
}
foreach (HierarchyNode childNode in this.ChildNodes)
{
childNode.IdentifySubNodeOfRequestedNode(reqstedId, stopRecursiveCall);
if (stopRecursiveCall)
break;
}
}
不需要布尔
public class HierarchyNode
{
private decimal UserId;
private List<HierarchyNode> ChildNodes;
public List<HierarchyNode> IdentifySubNodeOfRequestedNode(int reqstedId)
{
if (this.UserId == reqstedId)
{
return this.ChildNodes;
}
return this.ChildNodes.
Select(childNode => childNode.IdentifySubNodeOfRequestedNode(reqstedId)).
FirstOrDefault(children => children != null);
}
}
您的算法有一些潜在的缺陷,这些缺陷源于潜在的主要问题:您试图将算法的主要目的(查找和返回某些内容)和一个临时优化(一旦找到该对象停止循环)分开。
用伪代码,您的算法应该做的是:
find(id):
if (this.id == id):
return this.children
foreach (child in this.children):
found = child.find(id)
if (found != null):
return found
return null
这将查找值的行为与停止递归的行为联系在一起(当返回值时,递归停止)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.