From 38cbe1c55bbd4ee3b1cb379736debd8b1fffe497 Mon Sep 17 00:00:00 2001 From: bt3gl <138340846+bt3gl-google@users.noreply.github.com> Date: Sun, 30 Jul 2023 15:51:43 -0700 Subject: [PATCH] Update construct_tree_inorder_postorder.py --- .../construct_tree_inorder_postorder.py | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/trees_and_graphs/construct_tree_inorder_postorder.py b/trees_and_graphs/construct_tree_inorder_postorder.py index a1fec27..144779d 100644 --- a/trees_and_graphs/construct_tree_inorder_postorder.py +++ b/trees_and_graphs/construct_tree_inorder_postorder.py @@ -1,25 +1,29 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl # Given two integer arrays inorder and postorder where inorder is the inorder # traversal of a binary tree and postorder is the postorder traversal of the # same tree, construct and return the binary tree. -def build_tree(inorder: list[int], postorder: list[int]) -> Optional[TreeNode]: - - def fill_tree(i_left, i_right, inorder_map): + +def fill_tree(i_left, i_right, inorder_map): - if i_left > i_right: + if i_left > i_right: return None - val = postorder.pop() - root = TreeNode(val) + val = postorder.pop() + root = TreeNode(val) - index_here = inorder_map[val] + index_here = inorder_map[val] - root.right = fill_tree(index_here + 1, i_right, inorder_map) - root.left = fill_tree(i_left, index_here - 1, inorder_map) + root.right = fill_tree(index_here + 1, i_right, inorder_map) + root.left = fill_tree(i_left, index_here - 1, inorder_map) - return root + return root + + +def build_tree(inorder: list[int], postorder: list[int]) -> Optional[TreeNode]: inorder_map = {val: index for index, val in enumerate(inorder)} - return fill_tree(0, len(inorder) - 1, inorder_map)