编程题,按层次遍历,利用一个分隔树节点进行层次的分隔
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
// Start typing your Java solution below
// DO NOT write main() function
int SPLIT = -99999;
TreeLinkNode tmp = new TreeLinkNode(SPLIT);
Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
if (root != null) {
queue.add(root);
queue.add(tmp);
}
TreeLinkNode previous = null;
TreeLinkNode node = null;
while (!queue.isEmpty()) {
node = queue.poll();
if (previous == null) {
previous = node;
node = queue.poll();
}
if (previous.val != SPLIT) {
if (node.val != SPLIT) {
previous.next = node;
} else {
previous.next = null;
}
}
if (previous.left != null) {
queue.add(previous.left);
queue.add(previous.right);
}
if (previous.val == SPLIT && !queue.isEmpty())
queue.add(previous);
previous = node;
}
}
}
利用Queue的peek()方法简化代码,直接用null进行分隔:
/**
* Definition for binary tree with next pointer.
* public class TreeLinkNode {
* int val;
* TreeLinkNode left, right, next;
* TreeLinkNode(int x) { val = x; }
* }
*/
public class Solution {
public void connect(TreeLinkNode root) {
// Start typing your Java solution below
// DO NOT write main() function
Queue<TreeLinkNode> queue = new LinkedList<TreeLinkNode>();
if (root != null) {
queue.add(root);
queue.add(null);
}
while (!queue.isEmpty()) {
TreeLinkNode node = queue.poll();
if (node == null) {
if (!queue.isEmpty())
queue.add(node);
} else {
node.next = queue.peek();
if (node.left != null)
queue.add(node.left);
if (node.right != null)
queue.add(node.right);
}
}
}
}
这个算法也适用于 Populating Next Right Pointers in Each Node II,可以PASS Judge Large