解决方案


方法一:存储位置

思路

很明显,最直接的解法分为两步:第一步,求出所有节点的位置,第二步,报告节点值。

算法

为了能够求出每一个节点的位置,我们可以使用一个深度优先遍历。在遍历的过程中,我们为每个节点不断调整位置 (x, y)。当我们从父节点移动到子节点的时候,当前位置会根据我们访问的是左孩子还是右孩子变化为 (x-1, y+1)(x+1, y+1)。[我们用 y+1 代替 y-1 让排序过程更方便]

为了能够报告节点值,我们按照先 xy 的顺序排序,让这些节点处于正确的顺序以便我们将它们加入答案。

更多细节请关注行内注释。

复杂度分析

  • 时间复杂度:,其中 是给定树中的节点数量。

  • 空间复杂度: