From b61c58b1587d4e4e7bea9f79932d880e97ba42f4 Mon Sep 17 00:00:00 2001 From: bt3gl <138340846+bt3gl-cryptographer@users.noreply.github.com> Date: Tue, 8 Aug 2023 14:51:08 -0700 Subject: [PATCH] Update and rename bt_construction_inorder_postorder.py to bt_construct_inorder_postorder.py --- trees/bt_construct_inorder_postorder.py | 25 +++++++++++++++++++ trees/bt_construction_inorder_postorder.py | 29 ---------------------- 2 files changed, 25 insertions(+), 29 deletions(-) create mode 100644 trees/bt_construct_inorder_postorder.py delete mode 100644 trees/bt_construction_inorder_postorder.py diff --git a/trees/bt_construct_inorder_postorder.py b/trees/bt_construct_inorder_postorder.py new file mode 100644 index 0000000..697186d --- /dev/null +++ b/trees/bt_construct_inorder_postorder.py @@ -0,0 +1,25 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +# author: bt3gl + + +def build_tree(left, right, index_map): + + if left > right: + return None + + root = Node(postorder.pop()) # this order change from preorder + index_here = index_map[root.val] + + root.right = build_tree(index_here + 1, right, index_map) # this order change from preorder + root.left = build_tree(left, index_here - 1, index_map) + + return root + + +def build_tree(inorder, postorder) -> Optional[Node]: + + index_map = {val: i for i, value in enumerate(inorder)} + + return fill_tree(0, len(inorder) - 1, index_map) + diff --git a/trees/bt_construction_inorder_postorder.py b/trees/bt_construction_inorder_postorder.py deleted file mode 100644 index 144779d..0000000 --- a/trees/bt_construction_inorder_postorder.py +++ /dev/null @@ -1,29 +0,0 @@ -#!/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 fill_tree(i_left, i_right, inorder_map): - - if i_left > i_right: - return None - - val = postorder.pop() - root = TreeNode(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) - - 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) -