Maximum Depth of N-ary Tree(N叉树最大深度)Swift实现错误排查
问题原因
你的代码问题出在运算符优先级上:Swift 中 + 运算符的优先级高于空合运算符 ??,所以你写的表达式实际执行逻辑等价于:
return node.children.map(maxDepth).max() ?? (0 + 1)
这就导致只有当 node.children 为空、max() 返回 nil 时才会执行 +1 操作;如果子节点数组不为空,就会直接返回子节点的最大深度,没有加上当前节点本身的 1 层深度,最终结果比预期少 1。
修复方案
只需要给空合运算的部分加括号,保证无论子节点是否为空,都会在计算出子节点最大深度后统一加 1 即可:
class Solution { func maxDepth(_ root: Node?) -> Int { guard let node = root else { return 0 } return (node.children.map(maxDepth).max() ?? 0) + 1 } }
验证
修改后测试你的用例:
- 叶子节点 three 没有子节点,子节点最大深度为 0,加 1 得到深度 1
- 节点 two 的子节点最大深度为 1,加 1 得到深度 2
- 根节点 one 的子节点最大深度为 2,加 1 得到深度 3,符合预期结果。
内容的提问来源于stack exchange,提问作者mfaani
相关产品推荐
相关产品推荐

