# https://leetcode.com/problems/recover-a-tree-from-preorder-traversal from typing import Optional class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right class Solution: def recoverFromPreorder(self, traversal: str) -> Optional[TreeNode]: i = 0 def recurse(level, curr: TreeNode): nonlocal i val = [] while i < len(traversal) and traversal[i] != '-': val.append(traversal[i]) i += 1 if len(val) > 0: curr.val = int(''.join(val)) next_level = 0 while i + next_level < len(traversal) and traversal[i + next_level] == '-': next_level += 1 if next_level == level + 1: i += next_level curr.left = TreeNode() recurse(next_level, curr.left) next_level = 0 while i + next_level < len(traversal) and traversal[i + next_level] == '-': next_level += 1 if next_level == level + 1: i += next_level curr.right = TreeNode() recurse(next_level, curr.right) result = TreeNode() recurse(0, result) return result