通过万岁!!!
- 题目:就是给你一个完全二叉树,只不过这个二叉树的每个节点有一个next指针,需要你将next指针进行补全,next指针指向这一层的下一个节点。
- 思路:这里我们需要用到层序遍历,然后每次拿到一个节点以后,让他指向下一个节点即可。层序遍历两个基本要素是队列和队列的大小size。并且这里需要判断能不能入队,如果左右指针为空了,则就不能入队了。
- 技巧:层序遍历
java代码
class Solution {
public Node connect(Node root) {
if (root == null) return null;
// 直接层序遍历二叉树即可
Queue<Node> queue = new LinkedList<>();
queue.add(root);
int size;
while (!queue.isEmpty()) {
size = queue.size();
Node remove = queue.remove();// 出队,然后将子节点入队,这个就是之前的元素,然后我们让他指向队头元素即可
if (remove.left != null)
queue.add(remove.left);
if (remove.right != null)
queue.add(remove.right);
for (int i = 1; i < size; i++) {
remove.next = queue.peek();// 前一个元素的next指向队头的元素
remove = queue.remove();// 然后队头出队,变成前一个元素
if (remove.left != null)
queue.add(remove.left);
if (remove.right != null)
queue.add(remove.right);
}
remove.next = null;// 这一层的最后一个元素了,指向null
}
return root;
}
}
- 总结:题目比较经典,难度适中,主要是很明显的就让我们看到了是层序遍历。