49 lines
1.2 KiB
C#
49 lines
1.2 KiB
C#
|
|
using System;
|
|||
|
|
using System.Collections.Generic;
|
|||
|
|
using System.Linq;
|
|||
|
|
using System.Text;
|
|||
|
|
using System.Threading.Tasks;
|
|||
|
|
|
|||
|
|
namespace DOAN.Common
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
|
|||
|
|
public class Node
|
|||
|
|
{
|
|||
|
|
public int Id { get; set; }
|
|||
|
|
public int? ParentId { get; set; }
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
public static class TreeNodeHelper
|
|||
|
|
{
|
|||
|
|
/// <summary>
|
|||
|
|
/// 获取指定节点的所有后代节点。
|
|||
|
|
/// </summary>
|
|||
|
|
/// <param name="nodes">所有节点的集合。</param>
|
|||
|
|
/// <param name="rootId">根节点的 ID。</param>
|
|||
|
|
/// <returns>所有后代节点的列表。</returns>
|
|||
|
|
public static List<Node> GetDescendants(List<Node> nodes, int rootId)
|
|||
|
|
{
|
|||
|
|
var descendants = new List<Node>();
|
|||
|
|
|
|||
|
|
void FindChildren(Node node)
|
|||
|
|
{
|
|||
|
|
var children = nodes.Where(n => n.ParentId == node.Id).ToList();
|
|||
|
|
foreach (var child in children)
|
|||
|
|
{
|
|||
|
|
descendants.Add(child);
|
|||
|
|
FindChildren(child);
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
var rootNode = nodes.FirstOrDefault(n => n.Id == rootId);
|
|||
|
|
if (rootNode != null)
|
|||
|
|
{
|
|||
|
|
FindChildren(rootNode);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return descendants;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|