题目传送: https://leetcode.cn/problems/populating-next-right-pointers-in-each-node/
运行效率
代码如下:
class Solution {
public Node connect(Node root) {
//处理边界情况
if(root==null||(root.left==null&&root.right==null)){
return root;
}
List<Node> list = getList(root);
for (int i=0;i<list.size()-1;i++){
Node curNode = list.get(i);
Node nextNode = list.get(i + 1);
if (curNode!=null){
curNode.next=nextNode;
}
}
return list.get(0);
}
public List<Node> getList(Node root) {
List<Node> result = new ArrayList<>();
//层序遍历一般通过队列来实现
ArrayDeque<Node> deque = new ArrayDeque<>();
deque.add(root);
while (!deque.isEmpty()) {
//用于存储下一层的所有节点
ArrayDeque<Node> arrayDeque = new ArrayDeque<>();
while (!deque.isEmpty()) {
Node poll = deque.poll();
result.add(poll);
if (poll.left != null) {
arrayDeque.add(poll.left);
}
if (poll.right != null) {
arrayDeque.add(poll.right);
}
}
result.add(null);
deque.addAll(arrayDeque);
}
return result;
}
}