Сцепка бинарного дерева из центрированного и прямого проходов
https://t.me/pythonlЗадача: Даны 2 списка preorder и inorder, где preorder - центрированный порядок дерева (сenter > left > rigth), inorder - прямой проход (left > center > right). Оба - описывают структуру одного дерева, необходимо сконструировать бинарное дерево.
Пример:
Ввод: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
Вывод: [3,9,20,null,null,15,7]
Ввод: preorder = [-1], inorder = [-1]
Вывод: [-1]
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> Optional[TreeNode]:
inorder_map={val:idx for idx, val in enumerate(inorder)}
preorder_idx=0
def treeHelper(left, right):
nonlocal preorder_idx
if left>right:
return None
node_val = preorder[preorder_idx]
root=TreeNode(node_val)
preorder_idx+=1
inorder_index=inorder_map[node_val]
root.left = treeHelper(left, inorder_index-1 )
root.right = treeHelper(inorder_index+1, right)
return root
return treeHelper(0, len(inorder)-1)