From c47e2e4cb2fe215250a781ae2d205bd3bf61b7d0 Mon Sep 17 00:00:00 2001 From: "M.V. Hutz" Date: Mon, 2 Feb 2026 18:23:19 -0500 Subject: [PATCH] feat: monday --- .../main.go | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 pkg/construct_binary_tree_from_preorder_and_inorder_traversal/main.go diff --git a/pkg/construct_binary_tree_from_preorder_and_inorder_traversal/main.go b/pkg/construct_binary_tree_from_preorder_and_inorder_traversal/main.go new file mode 100644 index 0000000..455a460 --- /dev/null +++ b/pkg/construct_binary_tree_from_preorder_and_inorder_traversal/main.go @@ -0,0 +1,65 @@ +package constructbinarytreefrompreorderandinordertraversal + +type TreeNode struct { + Val int + Left *TreeNode + Right *TreeNode +} + +type NodeInfo struct { + Val int + Preorder int + Inorder int +} + +func buildTreeInfo(info []NodeInfo) *TreeNode { + if len(info) == 0 { + return nil + } + + root_info := info[0] + for _, datum := range info { + if datum.Preorder < root_info.Preorder { + root_info = datum + } + } + + left_info := []NodeInfo{} + right_info := []NodeInfo{} + for _, datum := range info { + if datum.Inorder < root_info.Inorder { + left_info = append(left_info, datum) + } else if datum.Inorder > root_info.Inorder { + right_info = append(right_info, datum) + } else { + continue + } + } + + return &TreeNode{ + Val: root_info.Val, + Left: buildTreeInfo(left_info), + Right: buildTreeInfo(right_info), + } +} + +func buildTree(preorder []int, inorder []int) *TreeNode { + info_map := map[int]*NodeInfo{} + for o, v := range preorder { + info_map[v] = &NodeInfo{ + Val: v, + Preorder: o, + } + } + + for o, v := range inorder { + info_map[v].Inorder = o + } + + info := []NodeInfo{} + for _, datum := range info_map { + info = append(info, *datum) + } + + return buildTreeInfo(info) +}