数组与树结构互转
扁平数组转树
两次线性遍历的时间复杂度是 O(n)、空间复杂度是 O(n)。不能对每个节点再用 find 寻找父节点,否则会退化为 O(n²)。
树转扁平数组
迭代写法可以避免极深树导致调用栈溢出:
边界问题
面试中应主动确认:
- ID 是否唯一,
0是否是合法 ID。 - 根节点的
parentId是null、0还是不存在。 - 孤儿节点应该作为根、丢弃还是报错。
- 数据是否可能存在环。
- 是否需要保持输入顺序。
如果数据不可信,需要沿父链检测环,或在遍历时维护 visiting 与 visited 集合。发现环应报告数据错误,不能继续递归。

