bumpsoo 2025-02-22 23:36:40 +09:00
parent 8361e8fed6
commit c84d092488

View file

@ -0,0 +1,42 @@
# 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