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推荐
利用上一层 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}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
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 同题参考实现。
AlgoViz Lab
填充每个节点的下一个右侧节点指针 II · 解法对比
让每个节点 next 指向同层右侧相邻节点。
- 测试用例
root = [1,2,3,4,5,null,7]- 题目分类
- 二叉树
- 解法对比
- 2
层序队列连接
队列按层取出节点,依次连接当前层。
- 时间
O(n)- 空间
O(n)
利用上一层 next 链
沿当前层 next 遍历,用哑节点串起下一层。
- 时间
O(n)- 空间
O(1)