File tree Expand file tree Collapse file tree 1 file changed +36
-0
lines changed
construct-binary-tree-from-preorder-and-inorder-traversal Expand file tree Collapse file tree 1 file changed +36
-0
lines changed Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments