关于树的操作

一个简单树
1
2
3
4
5
class Item
{
public string Name { get; set; }
public List<Item> Items { get; set; } = new List<Item>();
}
基础数据
1
2
3
4
5
6
7
8
9
10
11
12
13
var aa = new List<Item>();

var a = new Item() { Name = "A" };
var b = new Item() { Name = "B" };
var c = new Item() { Name = "C" };
var d = new Item() { Name = "D" };
var e = new Item() { Name = "E" };

a.Items.Add(new Item { Name = "a1" });
a.Items.Add(new Item { Name = "a2" });

e.Items.Add(new Item { Name = "e1" });
e.Items.Add(new Item() { Name = "e2" });
简单遍历
1
2
3
4
5
6
7
8
9
10
11
12
13
14
static void Loop2(List<Item> aa, string key)
{
//根
foreach (var item in aa)
{
if (item.Name==key)
{
//Dosomething
Console.WriteLine("OK");
}

Loop2(item.Items, key);
}
}

以上的内容都很简单,现在我们来思考一下,假如我们需要返回一个值? 例如是否存在指定Name节点的布尔值。

暂时只想到这样的办法,肯定有更好的方案。

1
2
3
4
bool res = false;
LoopAct(aa, (x) => { if (x.Name == "e1") res = true; });

Console.WriteLine(res);