SDET / SWE · Technical Fundamentals

TikTok 二叉树遍历:前中后序、层序与显式栈

解释访问时机与用途,区分树和图,处理深树栈风险与BST顺序条件。

题目重点:解释访问时机与用途,区分树和图,处理深树栈风险与BST顺序条件。

题意与假设

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

  • 训练二叉树无环且子节点不共享;“中序升序”只适用于有序BST而非任意二叉树。

解题路线

  1. 前序在递归子树前访问root,常用于复制/序列化结构;中序在左后右前访问,BST条件下得到有序值;后序在子树结束后访问,适合高度、释放与树DP聚合。
  2. 层序用队列按深度访问,适合逐层输出与最近目标;队列存当前/下一层,最宽层决定主要缓冲空间。递归DFS的主要额外空间是树高。
  3. 显式栈模拟后序可用进入/退出标记:进入压退出帧再压孩子,退出时孩子结果已完成。不能把前序值立即聚合成依赖孩子的后序DP。
  4. 序列化若只记录遍历值通常不够恢复唯一树,需空节点标记或额外遍历及无重复等条件。重复值使仅按值定位节点更不可靠。
  5. 树输入可假设每节点唯一父;若实际是图或共享结构,需要seen防循环并定义是否重复访问。将图当树直接递归可能无限或重复计算。
  6. 测试空树、单节点、链、完满树、重复值;深树可能超递归栈,显式结构避免语言调用深度,但仍需O(h)或O(n)内存。

手动走一遍

根2左1右3:前序2,1,3,中序1,2,3,后序1,3,2,层序2,1,3。任意树根1左3右2,中序3,1,2,不是升序。

规模与取舍

每节点一次O(n)时间;DFS递归/显式路径O(h),BFS O(w),h树高、w最大宽度;输出全序列另O(n)。显式后序若缓存所有结果另O(n)。

易错点与追问

容易失分的边界

  • 所有二叉树中序有序。
  • 深树一概说O(log n)栈。
  • 只有值序列便一定能恢复唯一树。

继续深挖

  • Morris遍历的修改输入取舍?
  • 如何无递归后序?
  • 有父指针时怎样遍历?
✓已复制微信号!