本题其实想通了,就是一道中等难度的Medium,但是如果想不通,就是Hard。。
换句话说,难度在于思路,而不是实现
本题如果没有空间的要求,就可以用BFS解决,但是因为加了这个要求,就给了人一种无法用BFS解决的错觉,而想办法用DFS解决。应该说或许DFS也能解决,但是BFS解决起来真的不难。
- 尝试连接每一层的所有Node
- 假设上次层的连接好了,就可以运用上一层的Node + 一个for loop连接下一层的所有node
- 需要一个virtualNode帮我们做到这些
- 时间复杂度:
- 空间复杂度:
如上图所示,如果2,3相连,并有一个virtualNode指向4,则很容易将4,5,7相连,代码如下:
/*// Definition for a Node.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;}};*/class Solution {public Node connect(Node root) {Node head = root;while (head != null) {Node virtualHead = new Node(-1);Node current = virtualHead;for (Node tmp = head; tmp != null; tmp = tmp.next) {if (tmp.left != null) {current.next = tmp.left;current = current.next;}if (tmp.right != null) {current.next = tmp.right;current = current.next;}}head = virtualHead.next;}return root;}}
