Sunday, March 17, 2013
[LeetCode] Populating Next Right Pointers in Each Node
Thought:
Recursion.
Code:
public class Solution {
public void connect(TreeLinkNode root) {
if (root == null) return;
if (root.left != null) root.left.next = root.right;
if (root.right != null) root.right.next = root.next != null ? root.next.left : null;
connect(root.left);
connect(root.right);
}
}
Thought: using a Level Order Traversal will be more clear and common.
Code:
public void connect(TreeLinkNode root) {
if (root == null) return;
Queue<TreeLinkNode> q1 = new LinkedList<TreeLinkNode>();
Queue<Integer> q2 = new LinkedList<Integer>();
q1.offer(root);
q2.offer(1);
while (!q1.isEmpty()) {
TreeLinkNode current = q1.poll();
int level = q2.poll();
if (q2.peek() != null && q2.peek() == level) {
current.next = q1.peek();
}
//do something with current
if (current.left != null) {
q1.offer(current.left);
q2.offer(level + 1);
}
if (current.right != null) {
q1.offer(current.right);
q2.offer(level + 1);
}
}
}
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment