namespace Try_More_On_IEnumerable
static void Main(string[] args)
Console.WriteLine($"运行成功,{DateTime.Now:O}");
namespace Try_More_On_IEnumerable
using System.Collections.Generic;
Children = Enumerable.Empty<TreeNode>();
public int Value { get; set; }
public IEnumerable<TreeNode> Children { get; set; }
var dftResult = new[] {0, 1, 3, 2};
var dft = DFTByEnumerable(tree).ToArray();
dft.Should().Equal(dftResult);
var dftList = DFTByStack(tree).ToArray();
dftList.Should().Equal(dftResult);
var dftByRecursion = DFTByRecursion(tree).ToArray();
dftByRecursion.Should().Equal(dftResult);
var bdfResult = new[] {0, 1, 2, 3};
var bft = BFT(tree).ToArray();
bft.Should().Equal(bdfResult);
IEnumerable<int> DFTByEnumerable(TreeNode root)
foreach (var child in root.Children)
foreach (var item in DFTByEnumerable(child))
IEnumerable<int> DFTByStack(TreeNode root)
var result = new List<int>();
var stack = new Stack<TreeNode>();
while (stack.TryPop(out var node))
foreach (var nodeChild in node.Children.Reverse())
IEnumerable<int> DFTByRecursion(TreeNode root)
var list = new List<int> {root.Value};
foreach (var rootChild in root.Children)
list.AddRange(DFTByRecursion(rootChild));
IEnumerable<int> BFT(TreeNode root)
foreach (var bftChild in BFTChildren(root.Children))
IEnumerable<int> BFTChildren(IEnumerable<TreeNode> children)
var tempList = new List<TreeNode>();
foreach (var treeNode in children)
yield return treeNode.Value;
foreach (var bftChild in tempList.SelectMany(treeNode => BFTChildren(treeNode.Children)))