public void LeavesTest() { var tree = new TreeNode <int>(0); TreeNode <int>[] result = TreeUtils.Leaves(tree, t => t.Children).ToArray(); Assert.Single(result); Assert.Contains(result, r => r.Id == 0); tree .AddChild(1) .AddChild(2).Parent .AddChild(3) .AddChild(4).Parent .AddChild(5).Parent.Parent.Parent .AddChild(6).Parent .AddChild(7) .AddChild(8); result = TreeUtils.Leaves(tree, t => t.Children).ToArray(); Assert.Equal(5, result.Length); Assert.Contains(result, r => r.Id == 2); Assert.Contains(result, r => r.Id == 4); Assert.Contains(result, r => r.Id == 5); Assert.Contains(result, r => r.Id == 6); Assert.Contains(result, r => r.Id == 8); }
public void DescendantsTest() { var tree = new TreeNode <string>("F"); tree .AddChild("B") .AddChild("A").Parent .AddChild("D") .AddChild("C").Parent .AddChild("E").Parent.Parent.Parent .AddChild("G") .AddChild("I") .AddChild("H"); IEnumerable <TreeNode <string> > descendants = TreeUtils.Descendants(tree, n => n.Children.AsEnumerable().Reverse(), includeSelf: true); Assert.Equal("F, B, A, D, C, E, G, I, H", string.Join(", ", descendants.Select(n => n.Id))); descendants = TreeUtils.Descendants(tree, n => n.Children.AsEnumerable().Reverse(), includeSelf: false); Assert.Equal("B, A, D, C, E, G, I, H", string.Join(", ", descendants.Select(n => n.Id))); descendants = TreeUtils.Descendants(tree, n => n.Children.AsEnumerable().Reverse(), traversal: TreeTraversal.PostOrder); Assert.Equal("A, C, E, D, B, H, I, G", string.Join(", ", descendants.Select(n => n.Id))); }