Skip to content

Commit 100a436

Browse files
authored
Create yeonguchoe.go
1 parent 678b7f3 commit 100a436

File tree

1 file changed

+36
-0
lines changed
  • construct-binary-tree-from-preorder-and-inorder-traversal

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
func indexOf(slice []int, value int) int {
2+
for i, v := range slice {
3+
if v == value {
4+
return i
5+
}
6+
}
7+
return -1
8+
}
9+
10+
func buildTree(preorder []int, inorder []int) *TreeNode {
11+
if len(preorder) == 0 || len(inorder) == 0 {
12+
return nil
13+
}
14+
15+
// Preorder의 처음 값으로 root을 만듬
16+
rootVal := preorder[0]
17+
root := &TreeNode{Val: rootVal}
18+
19+
// inorder에서 root의 위치를 찾음
20+
mid := indexOf(inorder, rootVal)
21+
22+
// inorder에서 mid의 왼쪽은 left subtree이고 오른쪽은 right subtree이다.
23+
leftInorder := inorder[:mid]
24+
rightInorder := inorder[mid+1:]
25+
26+
// left preorder를 계산한다.
27+
leftPreorder := preorder[1 : len(leftInorder)+1]
28+
// right preorder를 계산한다.
29+
rightPreorder := preorder[len(leftInorder)+1:]
30+
31+
// tree 만들기
32+
root.Left = buildTree(leftPreorder, leftInorder)
33+
root.Right = buildTree(rightPreorder, rightInorder)
34+
35+
return root
36+
}

0 commit comments

Comments
 (0)