Algorithms first

填充每个节点的下一个右侧节点指针 II · 交互式算法学习

让每个节点 next 指向同层右侧相邻节点。

#117 · 二叉树

填充每个节点的下一个右侧节点指针 II

Populating Next Right Pointers in Each Node II

测试用例root = [1,2,3,4,5,null,7]
树 / 图3 个关键状态
步骤 1从根层收集 2、3。dummy→2→3
123457
推荐

利用上一层 next 链

时间 O(n)空间 O(1)

沿当前层 next 遍历,用哑节点串起下一层。

1function connect(root) {2  let level = root;3  while (level) {4    const d = {5      next: null6    };7    let tail = d;8    for (let p = level; p; p = p.next) {9      if (p.left) tail = tail.next = p.left;10      if (p.right) tail = tail.next = p.right;11    }12    level = d.next;13  }14  return root;15}
多语言参考

Java · C++ · Go

来源 · CC BY-SA 4.0 ↗

这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。

1/*2// Definition for a Node.3class Node {4    public int val;5    public Node left;6    public Node right;7    public Node next;8 9    public Node() {}10 11    public Node(int _val) {12        val = _val;13    }14 15    public Node(int _val, Node _left, Node _right, Node _next) {16        val = _val;17        left = _left;18        right = _right;19        next = _next;20    }21};22*/23 24class Solution {25    public Node connect(Node root) {26        if (root == null) {27            return root;28        }29        Deque<Node> q = new ArrayDeque<>();30        q.offerLast(root);31        while (!q.isEmpty()) {32            Node p = null;33            for (int n = q.size(); n > 0; --n) {34                Node node = q.pollFirst();35                if (p != null) {36                    p.next = node;37                }38                p = node;39                if (node.left != null) {40                    q.offerLast(node.left);41                }42                if (node.right != null) {43                    q.offerLast(node.right);44                }45            }46        }47        return root;48    }49}
交互式算法学习

从执行步骤真正理解 LeetCode 经典 150

本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。

多形态可视化数组、矩阵、DP 表、递归树、树图、链表、栈队列堆、区间和状态机按解法选择。
动画与代码同步当前状态、步骤说明、变量和代码高亮保持一一对应,可逐步播放和回退。
适合面试复习每种方案都给出思路、时间复杂度、空间复杂度、测试用例和 LeetCode 中文原题入口。
AlgoViz Lab

填充每个节点的下一个右侧节点指针 II · 解法对比

让每个节点 next 指向同层右侧相邻节点。

测试用例
root = [1,2,3,4,5,null,7]
题目分类
二叉树
解法对比
2
方案 1

层序队列连接

队列按层取出节点,依次连接当前层。

时间
O(n)
空间
O(n)
方案 2

利用上一层 next 链

沿当前层 next 遍历,用哑节点串起下一层。

时间
O(n)
空间
O(1)