class Solution:
def recoverFromPreorder(self, S: str) -> TreeNode:
stack=[]
i=0
while i<len(S):
cnt = 0
while i < len(S) and S[i] == '-':
cnt += 1
i += 1
value=0
while i<len(S) and S[i].isdigit():
value=value*10+int(S[i])
i+=1
if not stack:
stack.append(TreeNode(value))
else:
node1=TreeNode(value)
if cnt==len(stack):
stack[-1].left=node1
else:
stack=stack[:cnt]
stack[-1].right=node1
stack.append(node1)
return stack[0]