目录
一、实现demo
二、封装方法
【ID=>祖先ID】
【ID=>祖先实体】
三、递归讲解
一、实现demo
class MainClass
{
static List<Person> PersonList = new List<Person>()
{
new Person(){ Id=1,ParentID=null,Name="小明曾祖父",},
new Person(){ Id=2,ParentID=1,Name="小明爷爷",},
new Person(){ Id=3,ParentID=1,Name="小明二爷爷",},
new Person(){ Id=4,ParentID=1,Name="小明三爷爷",},
new Person(){ Id=5,ParentID=2,Name="小明爸爸",},
new Person(){ Id=6,ParentID=2,Name="小明叔叔",},
new Person(){ Id=7,ParentID=5,Name="小明本人",},
new Person(){ Id=8,ParentID=5,Name="小明妹妹",},
new Person(){ Id=9,ParentID=7,Name="小明儿子",}
};
public static List<int> GetAncestors(int id)
{
var result = new List<int>(); // 初始化一个结果列表,用于存储所有父级 ID
var parent = PersonList.FirstOrDefault(p => p.Id == id)?.ParentID; // 查找当前 ID 的父节点 ID
if (parent.HasValue) // 如果有父节点
{
result.Add(parent.Value); // 将父节点 ID 添加到结果列表中
result.AddRange(GetAncestors(parent.Value)); // 递归查找并添加父节点的所有上级 ID
}
return result; // 返回包含所有父级 ID 的列表
}
public static List<Person> GetPersonAncestors(int id)
{
var result = new List<Person>(); // 初始化一个结果列表,用于存储所有父级 Person 对象
var person = PersonList.FirstOrDefault(p => p.Id == id); // 查找当前 ID 的 Person 对象
if (person != null && person.ParentID.HasValue) // 如果找到 Person 对象且有父节点
{
var parent = PersonList.FirstOrDefault(p => p.Id == person.ParentID.Value); // 查找父节点 Person 对象
if (parent != null)
{
result.Add(parent); // 将父节点 Person 对象添加到结果列表中
result.AddRange(GetPersonAncestors(parent.Id)); // 递归查找并添加父节点的所有上级 Person 对象
}
}
return result; // 返回包含所有父级 Person 对象的列表
}
static void Main(string[] args)
{
//要求:根据ID求其所有父级ID
var ids = GetAncestors(9);
var persons =GetPersonAncestors (9);
;
}
}
class Person
{
public int Id;
public string Name;
public int? ParentID;
}
二、封装方法
【ID=>祖先ID】
public static List<int> GetAncestors(int id)
{
var result = new List<int>(); // 初始化一个结果列表,用于存储所有父级 ID
var parent = PersonList.FirstOrDefault(p => p.Id == id)?.ParentID; // 查找当前 ID 的父节点 ID
if (parent.HasValue) // 如果有父节点
{
result.Add(parent.Value); // 将父节点 ID 添加到结果列表中
result.AddRange(GetAncestors(parent.Value)); // 递归查找并添加父节点的所有上级 ID
}
return result; // 返回包含所有父级 ID 的列表
}
【ID=>祖先实体】
public static List<Person> GetPersonAncestors(int id)
{
var result = new List<Person>(); // 初始化一个结果列表,用于存储所有父级 Person 对象
var person = PersonList.FirstOrDefault(p => p.Id == id); // 查找当前 ID 的 Person 对象
if (person != null && person.ParentID.HasValue) // 如果找到 Person 对象且有父节点
{
var parent = PersonList.FirstOrDefault(p => p.Id == person.ParentID.Value); // 查找父节点 Person 对象
if (parent != null)
{
result.Add(parent); // 将父节点 Person 对象添加到结果列表中
result.AddRange(GetPersonAncestors(parent.Id)); // 递归查找并添加父节点的所有上级 Person 对象
}
}
return result; // 返回包含所有父级 Person 对象的列表
}