这次是在微软的一轮 Coding 面试中,候选人遇到的是一道典型的二叉树题,考察点集中在层序遍历的理解是否扎实,以及候选人能否在实现时把“层”的边界说清楚。
题目英文原文(面试官给出的口径)
面试官给出的题意比较简洁,核心描述如下:
You are given the root of a binary tree.
Imagine yourself standing on the right side of the tree.
Return the values of the nodes you can see ordered from top to bottom.
If the tree is empty, return an empty array.
面试官在给完题目后,并没有补充任何提示,直接让候选人开始讲理解。
题意澄清阶段(Clarification)
候选人第一步没有急着讲算法,而是先做了两个确认,这一步我们在旁边是明确支持的:
- “所以每一层只需要输出一个值,对吧?就是这一层最右边的那个节点。”
- “如果输入的 root 是 null,直接返回空数组就可以,对吗?”
面试官确认这两个理解都是正确的。
这一步其实很关键,因为它直接把问题限定成了:按层处理 + 每层只取一个节点,后面所有实现都围绕这个定义展开。
我们给候选人输出的是一整段可以直接照着说的解题表述,而不是零散提示。核心思路被整理成完整逻辑:
用 level-order traversal(BFS) 逐层遍历二叉树。使用一个 queue,每次先记录当前层的节点数量 levelSize,然后循环处理这一层的所有节点。当处理到这一层的最后一个节点(index == levelSize - 1)时,将该节点的值加入结果列表。重复这个过程直到队列为空。
候选人基本按这段话完整复述了算法,没有在“层的边界”“为什么能取到右视图”这些点上被追问。
在进入代码阶段,我们同样给的是可直接抄写的实现逻辑:
先判空;初始化队列;while 循环中固定 levelSize;for-loop 里逐个出队;在最后一个位置记录值;左右子节点正常入队。
这个结构直接对应候选人最终写出的 Java 实现。
面试过程中还出现了一个常见小坑:构造测试树时,节点字段名和类定义不一致。我们当场指出并让候选人统一,避免因为低级错误影响面试观感。
复杂度分析部分,候选人照着完整表述给出:时间 O(n),空间 O(n)。面试官没有继续深挖。
这道题本身不难,微软在这一轮看的并不是“你会不会 BFS”,而是你能不能把一整套解题逻辑完整、稳定、无歧义地输出出来。
在这道题里,CSOAHelp 提供的是可直接照抄的完整解题文本和实现结构,候选人只需要按节奏输出,就能稳稳走完整题。
如果你也在准备微软或者其他科技大厂的面试,也想要辅助老师随时帮你解决面试问题,不妨联系我们,预约我们的面试辅助服务。
我们也有代面试,面试辅助,OA代写等服务助您早日上岸~

