[leetcode]Populating Next Right Pointers in Each Node
这道题目如果不用常数级的空间是很容易的,就是用一个queue呗。
public class Solution { public void connect(TreeLinkNode root) { LinkedList<TreeLinkNode> queue = new LinkedList<TreeLinkNode>(); queue.offer(root); int count = 0; int lastCount = 0; TreeLinkNode last = null; while (queue.size() != 0) { TreeLinkNode n = queue.poll(); if (n == null) continue; count++; if (last != null) last.next = n; if (lastCount == 0 || count == lastCount * 2) { lastCount = count; count = 0; n.next = null; last = null; } else { last = n; } queue.offer(n.left); queue.offer(n.right); } } }
但是题目要求常数级空间,怎么办呢?当时想啊,如果没有queue可怎么做到同一层从左到右遍历啊,后来搜索了之后发现其实可以用next指针嘛。其他还有递归法,精神就一样了。参见:http://blog.csdn.net/ithomer/article/details/8796542
public class Solution { public void connect(TreeLinkNode root) { TreeLinkNode left = root; TreeLinkNode n = null; while (left != null && left.left != null && left.right != null) { n = left; while (n != null) { n.left.next = n.right; if (n.next != null) { n.right.next = n.next.left; } n = n.next; } left = left.left; } } }