我有以下树
A
+-B
+-C
| +-D
+-E
+-F
+-G
Run Code Online (Sandbox Code Playgroud)
我试图找到G给定的A
private TreeListNode FindTreeNode(TreeListNode node, Enumerations.ItemType type,
Nullable<long> id)
{
TreeListNode found = null;
foreach (TreeListNode child in node.Nodes)
{
if ((Enumerations.ItemType)child[2] == type)
{
if (id == null)
{
found = child;
break;
}
else
{
if ((long)child[0] == (long)id)
{
found = child;
break;
}
}
}
else
{
if (child.HasChildren)
{
found = FindTreeNode(child, type, id);
break;
}
}
}
return found;
}
Run Code Online (Sandbox Code Playgroud)
FindTreeNode(root,C,null)
Run Code Online (Sandbox Code Playgroud)
因为C在G例程找到C及其子女之前.如果if(child.HasChildren)它找到的else块C及其子节点.当我试图找到E它的孩子时,递归调用无法正常工作.它带有根节点,A但在它进入递归后,子节点变为C然后nodes.Nodes = 1
当我搜索F或G它必须继续其递归.那么如何将子设置为根节点
即使递归调用没有找到任何东西,你也会收支平衡.将相关代码更改为:
if (child.HasChildren)
{
found = FindTreeNode(child, type, id);
if (found != null)
break;
}
Run Code Online (Sandbox Code Playgroud)
你的方法看起来很复杂.这不就是这样吗?
private TreeListNode FindTreeNode(TreeListNode node, Enumerations.ItemType type,
Nullable<long> id)
{
foreach (TreeListNode child in node.Nodes) {
if ((Enumerations.ItemType)child[2] == type &&
(id == null || (long)child[0] == id.Value)) {
return child;
}
if (child.HasChildren) {
TreeListNode found = FindTreeNode(child, type, id);
if (found != null) {
return found;
}
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4123 次 |
| 最近记录: |