public TreeNodeV2 Connect_BFS(TreeNodeV2 root) { var queue = new Queue <TreeNodeV2>(); queue.Enqueue(root); while (queue.Count != 0) { var nodeNumberInCurrLevel = queue.Count; TreeNodeV2 pre = null; while (nodeNumberInCurrLevel > 0) { var node = queue.Dequeue(); if (node == null) { nodeNumberInCurrLevel--; continue; } if (pre != null) { pre.next = node; } pre = node; queue.Enqueue(node.left); queue.Enqueue(node.right); nodeNumberInCurrLevel--; } } return(root); }
public TreeNodeV2(int val, TreeNodeV2 left, TreeNodeV2 right, TreeNodeV2 next) { this.val = val; this.left = left; this.right = right; this.next = next; }
public static TreeNodeV2 BuildTreeV2(int?[] input, int i) { if (i >= input.Length || input[i] == null) { return(null); } var root = new TreeNodeV2(input[i].Value); root.left = BuildTreeV2(input, 2 * i + 1); root.right = BuildTreeV2(input, 2 * i + 2); return(root); }
public TreeNodeV2 Connect_DFS(TreeNodeV2 root) { if (root == null) { return(root); } var temp = root.next; TreeNodeV2 nextNodeDownLevel = null; while (temp != null) { if (temp.left != null) { nextNodeDownLevel = temp.left; break; } if (temp.right != null) { nextNodeDownLevel = temp.right; break; } temp = temp.next; } if (root.left != null) { root.left.next = root.right ?? nextNodeDownLevel; } if (root.right != null) { root.right.next = nextNodeDownLevel; } Connect_DFS(root.right); Connect_DFS(root.left); return(root); }
public TreeNodeV2 Connect_DFS(TreeNodeV2 root) { if (root == null) { return(null); } if (root.left != null) { root.left.next = root.right; } if (root.right != null && root.next != null) { root.right.next = root.next.left; } Connect_DFS(root.left); Connect_DFS(root.right); return(root); }
public static string GetNodeString(TreeNodeV2 root) { var queue = new Queue <TreeNodeV2>(); var nodeStr = new List <string>(); var firstNodeFromLeft = new List <TreeNodeV2>(); if (root != null) { queue.Enqueue(root); } while (queue.Count != 0) { var nodeNumberInCurrLevel = queue.Count; var node = queue.Dequeue(); firstNodeFromLeft.Add(node); if (node.left != null) { queue.Enqueue(node.left); } if (node.right != null) { queue.Enqueue(node.right); } nodeNumberInCurrLevel--; while (nodeNumberInCurrLevel > 0) { node = queue.Dequeue(); if (node.left != null) { queue.Enqueue(node.left); } if (node.right != null) { queue.Enqueue(node.right); } nodeNumberInCurrLevel--; } } foreach (var item in firstNodeFromLeft) { var node = item; while (node != null) { nodeStr.Add(node.val.ToString()); node = node.next; } nodeStr.Add("#"); } return(string.Join(",", nodeStr)); }