题目介绍
力扣117题:leetcode-cn.com/problems/po…
分析
其实这道题目跟[116. 填充每个节点的下一个右侧节点指针]还是有一些区别得。
- 该题目只是针对二叉树。
- 填充next指针不一定填充的是属于同一个父节点得元素
我们可以通过层序遍历的方式,遍历每一层元素,然后再依次填充next指针,代码如下:
/*
// 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 null;
}
Queue<Node> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
int n = queue.size();
Node lastNode = null;
for (int i = 0; i < n; i++) {
// 变量 i 无实际意义,只是为了循环 n 次
Node node = queue.poll();
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
if(lastNode != null) {
lastNode.next = node;
}
lastNode = node;
}
}
return root;
}
}