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