1028:从先序遍历还原二叉树(1797 分)
目录
题目
我们从二叉树的根节点 root
开始进行深度优先搜索。
在遍历中的每个节点处,我们输出 D
条短划线(其中 D
是该节点的深度),然后输出该节点的值。(如果节点的深度为 D
,则其直接子节点的深度为 D + 1
。根节点的深度为 0
)。
如果节点只有一个子节点,那么保证该子节点为左子节点。
给出遍历输出 S
,还原树并返回其根节点 root
。
示例 1:
输入:"1-2--3--4-5--6--7" 输出:[1,2,5,3,4,6,7]
示例 2:
输入:"1-2--3---4-5--6---7" 输出:[1,2,5,3,null,6,null,4,null,7]
示例 3:
输入:"1-401--349---90--88" 输出:[1,401,null,349,88,90]
提示:
- 原始树中的节点数介于
1
和1000
之间。 - 每个节点的值介于
1
和10 ^ 9
之间。
分析
先正则提取出每个节点的值和深度,然后模拟:
- 遍历时,假如当前节点刚好比上个节点的深度大 1
- 显然当前节点即为上个节点的子节点,应该接到上个节点的下面
- 如果上个节点还没有左子树,就接到左边,否则接到右边
- 否则,去掉上个节点直到找到深度比当前节点深度大 1 的节点,转为上一步
这个过程显然可以用栈。
解答
|
|
40 ms