BFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| class Solution { public Node connect(Node root) { if (root == null) { return null; } Queue<Node> queue = new LinkedList<>(); queue.offer(root);
while (!queue.isEmpty()) { Node pre = null; for (int i = queue.size(); i > 0; i--) { Node node = queue.poll(); if (pre != null) { pre.next = node; }
if (node.left != null) { queue.offer(node.left); } if (node.right != null) { queue.offer(node.right); } pre = node; } }
return root; } }
|
BFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| class Solution { public Node connect(Node root) { if (root == null) { return null; }
Queue<Node> queue = new LinkedList<>(); queue.add(root);
while (!queue.isEmpty()) { Node pre = null; for (int i = queue.size(); i > 0; i--) { Node node = queue.poll(); node.next = pre; pre = node;
if (node.right != null) { queue.add(node.right); } if (node.left != null) { queue.add(node.left); } } }
return root; } }
|
Iterate
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| class Solution { public Node connect(Node root) { Node leftmost = root; while (leftmost != null) { Node nextLayerDummyHead = new Node(); Node pre = nextLayerDummyHead, curr = leftmost; while (curr != null) { if (curr.left != null) { pre.next = curr.left; pre = pre.next; } if (curr.right != null) { pre.next = curr.right; pre = pre.next; }
curr = curr.next; }
leftmost = nextLayerDummyHead.next; }
return root; } }
|
References
117. Populating Next Right Pointers in Each Node II