public static void MergeTrees(Node head1, Node head2) { foreach (var child2 in head2.children) { Node child1 = head1.children.FirstOrDefault(node => node.value == child2.value); if (child1 != null) MergeTrees(child1, child2); else { head1.Add(child2); MergeTrees(head1.children.Last(), child2); } } }
public static void Main(string[] args) { Node head1 = new Node { value = "A" }; head1.Add("B", "C", "F"); head1["C"].Add("D", "E"); head1["F"].Add("G", "H", "I"); Node head2 = new Node { value = "A" }; head2.Add("B", "C"); head2["C"].Add("D", "K", "L"); Node result = CopyTree(head1); MergeTrees(result, head2); }
public static void MergeTrees(Node head1, Node head2) { foreach (var child2 in head2.children) { Node child1 = head1.children.FirstOrDefault(node => node.value == child2.value); if (child1 != null) { MergeTrees(child1, child2); } else { head1.Add(child2); MergeTrees(head1.children.Last(), child2); } } }