← 返回博客列表 Amazon NG 真题:二叉树层序连接 next 指针(LC116)
Amazon

Amazon NG 真题:二叉树层序连接 next 指针(LC116)

2026-06-15

Amazon NG VO 每轮先 BQ 再编程,这道"按层连接二叉树 next 指针"是其中一轮的编程题,对应 LeetCode 116/117。这篇按 oavoservice 学员的复盘讲清拆题:树 / 图的题 edge case clarify 非常重要,而这题本质是"按层访问二叉树"+"修改节点内部引用"的结合,并在此基础上看你对 BFS 和 DFS 的掌握。文末附 VO辅助 / VO代面 的对接路径,给正在校招、转码、SDE 求职的同学一个实战参考。


一、题目背景

维度 详情
轮次 Amazon NG VO 编程轮(先 BQ 后编程)
对应 LeetCode 116 / 117
语言 自选,Python 常见
考察 层序遍历、节点引用修改、BFS/DFS 取舍、edge case

二、题目

把一棵二叉树每个节点的 next 指针,连成指向同一层的下一个节点(每层最右节点的 nextNone)。

三、拆题:先 clarify,再选 BFS / DFS

树 / 图的题,edge case 的 clarify 非常重要:是完美二叉树还是普通二叉树?空树?只有根节点?这些先问清楚,再决定写法。

一句话概括这题:"按层访问二叉树" + "修改节点内部引用" 两件事的结合,并在此基础上看你对 BFS 和 DFS 的掌握。

面试里建议先写清楚、稳的 BFS,再口头补充 O(1) 空间的优化方向——既展示掌握度,又不冒险。

BFS 解法(推荐)

from collections import deque

class Node:
    def __init__(self, val=0, left=None, right=None, next=None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next

def connect(root):
    if not root:
        return root
    q = deque([root])
    while q:
        size = len(q)
        prev = None
        for _ in range(size):
            node = q.popleft()
            if prev:
                prev.next = node      # 串起同一层的相邻节点
            prev = node
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        # prev 此时是本层最右节点,其 next 默认为 None
    return root

时间复杂度:O(n)(每节点入队出队各一次)。空间复杂度:O(w),最坏 O(n)(队列)。

O(1) 空间优化(完美二叉树)

完美二叉树里,上一层连好 next 后,就能像"链表"一样横向遍历上一层,逐个把下一层的左右孩子串起来,不再需要队列:

def connect_perfect(root):
    leftmost = root
    while leftmost and leftmost.left:
        head = leftmost
        while head:
            head.left.next = head.right                 # 同父:左 → 右
            if head.next:
                head.right.next = head.next.left        # 跨父:右 → 下一个父的左
            head = head.next
        leftmost = leftmost.left
    return root

时间复杂度:O(n)。空间复杂度:O(1)(不含输出)。

四、临场提醒


FAQ

Q1:这道题 BFS 和 DFS 怎么选?

BFS 层序最直观、最稳,空间 O(w);完美二叉树可用上一层已连好的 next 做到 O(1) 额外空间,但逻辑更绕。面试建议先写稳的 BFS,再口头补 O(1) 优化方向,展示掌握度。

Q2:LC116 和 LC117 有什么区别?

116 是完美二叉树(每层填满),可直接用"同父左右 + 跨父"的规则做 O(1) 空间;117 是普通二叉树,孩子可能缺失,需要额外逻辑找下一层的第一个有效孩子,O(1) 解法更繁琐。

Q3:为什么说 edge case clarify 很重要?

树形态(完美 / 普通)、空树、只有根节点都会影响写法和边界。先问清楚能避免写到一半才发现假设错了,也向面试官展示你严谨的工程习惯。

Q4:Amazon NG 编程轮怎么高效准备?

按树 / 图遍历、链表、DP、双指针分专题刷,每类限时练并口头讲思路,同时备好 BQ。需要按 Amazon NG 题型 + BQ 做限时 mock、逐题讲解或 VO辅助 / VO代面 全程对接,可以走下面的路径定制。


正在准备 Amazon NG VO?

Amazon NG 是 BQ + 编程的 loop,编程爱在经典树题上看 BFS/DFS 取舍。oavoservice 提供 Amazon 全流程陪练:树 / 图 / 链表 / DP 高频题限时模拟,edge case clarify 与 O(1) 优化逐题打磨,16 条 LP 的 STAR 故事同步准备。教练含大厂资深工程师与 Bar Raiser 视角,支持 VO辅助 / VO代面 全程对接。

立即添加微信 Coding0201获取 Amazon 真题与陪练

联系方式