Applied Scientist / MLE · Technical Coding

Capital One 树的根到叶路径:DFS 回溯与输出成本

Applied Scientist/MLE 技术轮都提打印树到叶路径;按叶节点定义递归/迭代遍历并计算路径拷贝成本。

题目重点:Applied Scientist/MLE 技术轮都提打印树到叶路径;按叶节点定义递归/迭代遍历并计算路径拷贝成本。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版是一棵有限、无环、非空二叉树,叶为 left/right 均空;若是多叉树,遍历 children 即可。
  • 输出每条根到叶的节点值列表,按先左后右 DFS 顺序;若要求格式化字符串,只改输出层。
  • 空树返回空列表,节点值可重复,不按值去重。

解题路线

  1. DFS 进入节点时把值加入 path;若左右均空,复制当前 path 到答案;否则先左后右递归,然后退出时 pop。
  2. 复制路径只发生在叶,避免每经过一条边就创建新列表;若要避免递归深度溢出,用显式栈保存 (node,path/parentPointer)。
  3. 正确性由 DFS 每个叶访问恰一次,当前 path 恰为根到该叶的祖先序列。
  4. 检查单节点树、只有左链、平衡树、重复值、空树和极深树。

手动走一遍

训练树根 1,左子 2,右子 3;2 的右子 4。按先左后右输出 [[1,2,4],[1,3]]。节点 2 不是叶,不能提前输出 [1,2]。

规模与取舍

n 个节点遍历 O(n),另加实际输出总长度 S=Σ叶路径长度,整体 O(n+S) 时间;递归栈 O(h),答案 O(S),h 为树高。极端星形/深链的 S 与 n 关系不同,不能笼统说纯 O(n) 输出。

易错点与追问

容易失分的边界

  • 到任意节点都输出一条路径,而非只到叶。
  • 把可变 path 引用直接 append 到答案,回溯后所有结果变空/相同。
  • 只按节点值去重,重复值的不同叶路径丢失。
  • 忘记极深树递归栈风险。

继续深挖

  • 多叉树怎样改?
  • 只统计路径数或路径和时如何省空间?
  • 路径输出很大时如何流式生成?
  • 树可能共享子节点/有环时要不要去重?
✓已复制微信号!