feat: monday

This commit is contained in:
2026-02-02 18:23:19 -05:00
parent 5f33c164d9
commit c47e2e4cb2

View File

@@ -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)
}