题目描述
样例描述
思路
修改BFS + 找规律
- 修改BFS,不需要用到队列(O(n)),直接利用next特性。
- 当前结点左孩子的next指向右孩子,右孩子的next指向宽搜中当前结点下一个的左孩子。
- 左孩子的next一定不为空,注意判断右孩子的next是否为空。
- 利用root不断取左孩子往下层层遍历。
代码
/*
// 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) {
if (root == null) return root;
//先保存根结点,因为后面会改变
Node originalRoot = root;
//当下一层不为空
while (root.left != null) {
for (Node p = root; p != null; p = p.next) {
//当前结点左孩子的next一定Wie右孩子
p.left.next = p.right;
//右孩子不一定有next,先判断是否为空
if (p.next != null) {
p.right.next = p.next.left;
}
}
root = root.left;
}
return originalRoot;
}
}