问题:先序恢复原树
思路
- 横线的多少代表了该节点是在二叉树的第几层
- 沿着先序遍历的路再走一遍即可
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution(object):
def recoverFromPreorder(self, S):
"""
:type S: str
:rtype: TreeNode
"""
def dfs(s,lev):
if(len(s)==0):
return "",None
# 记录数字前面的 -
i = 0
while(s[i]=="-"):
i = i+1
if i == lev:
j = i
while j<len(s) and s[j]!="-":
j=j+1
# print(s[i:j])
## 添加节点
node = TreeNode(int(s[i:j]))
s,node.left = dfs(s[j:],lev+1)
s,node.right = dfs(s,lev+1)
return s,node
else:
# print(None)
return s,None
s,node = dfs(S,0)
return node