//BFS using queue public static void ConnectQueue(TreeLinkNode root) { if (root == null) { return; } var queue = new Queue <TreeLinkNode>(); var temp = root; queue.Enqueue(temp); while (queue.Count != 0) { temp = queue.Dequeue(); if (temp.left != null) { temp.left.next = temp.right; queue.Enqueue(temp.left); queue.Enqueue(temp.right); if (temp.next != null) { temp.right.next = temp.next.left; } } } }
//DFS recursive public static void ConnectRecursive(TreeLinkNode root) { if (root == null) return; if (root.left != null) { root.left.next = root.right; if (root.next != null) root.right.next = root.next.left; } ConnectRecursive(root.left); ConnectRecursive(root.right); }
public void TestMethodConnectRecursive() { var tree = new TreeLinkNode(0); tree.left = new TreeLinkNode(1); tree.right = new TreeLinkNode(2); tree.left.left = new TreeLinkNode(3); tree.left.right = new TreeLinkNode(4); tree.right.left = new TreeLinkNode(5); tree.right.right = new TreeLinkNode(6); ConnectSolution.ConnectRecursive(tree); Assert.AreEqual("[0,#,1,2,#,3,4,5,6,#]", tree.ToString()); }
//DFS recursive public static void ConnectRecursive(TreeLinkNode root) { if (root == null) { return; } if (root.left != null) { root.left.next = root.right; if (root.next != null) { root.right.next = root.next.left; } } ConnectRecursive(root.left); ConnectRecursive(root.right); }
//BFS using queue public static void ConnectQueue(TreeLinkNode root) { if (root == null) return; var queue = new Queue<TreeLinkNode>(); var temp = root; queue.Enqueue(temp); while (queue.Count != 0) { temp = queue.Dequeue(); if (temp.left != null) { temp.left.next = temp.right; queue.Enqueue(temp.left); queue.Enqueue(temp.right); if (temp.next != null) temp.right.next = temp.next.left; } } }
public TreeLinkNode(int val) { this.val = val; left = right = next = null; }