BFS
很容易联想到广度优先遍历,逐层添加
package Tree.Leetcode116.Solution1;
import java.util.LinkedList;
/**
* 利用广度优先遍历,使用的也是常数级空间?
*/
public class Solution {
public Node connect(Node root) {
if(root == null)
return root;
LinkedList<Node> queue = new LinkedList<>();
queue.addLast(root);
while(queue.size() != 0){
int size = queue.size();
for (int i = 0; i < size; i++) {
Node temp = queue.pollFirst();
if(i < size - 1){
temp.next = queue.peekFirst();
}
if(temp.left != null)
queue.addLast(temp.left);
if(temp.right != null)
queue.addLast(temp.right);
}
}
return root;
}
}
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
利用已经连接的next指针,逐层添加
package Tree.Leetcode116.Solution2;
/**
* 逐层完成连接
* 利用了已经连接的next指针
*/
public class Solution {
public Node connect(Node root) {
Node leftMost = root;//指向每层的最左边的节点
while(leftMost != null){
Node head = leftMost;
while (head != null){
if(head.left != null){
head.left.next = head.right;
if(head.next != null){
head.right.next = head.next.left;
}
}
head = head.next;//当前层的下一个节点
}
leftMost = leftMost.left;
}
return root;
}
}
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};