This commit is contained in:
parent
8361e8fed6
commit
c84d092488
1 changed files with 42 additions and 0 deletions
42
hard/recover_a_tree_from_preorder_traversal.py
Normal file
42
hard/recover_a_tree_from_preorder_traversal.py
Normal 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
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue