Skip to content

Commit f71e1b3

Browse files
donghyeon95donghyeon95
authored andcommitted
feat: Construct Binary Tree From Preorder And Inorder Traversal
#253
1 parent ac9523b commit f71e1b3

File tree

1 file changed

+116
-0
lines changed

1 file changed

+116
-0
lines changed
Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
import java.util.ArrayList;
2+
import java.util.Arrays;
3+
import java.util.HashMap;
4+
import java.util.List;
5+
6+
/**
7+
* Definition for a binary tree node.
8+
* public class TreeNode {
9+
* int val;
10+
* TreeNode left;
11+
* TreeNode right;
12+
* TreeNode() {}
13+
* TreeNode(int val) { this.val = val; }
14+
* TreeNode(int val, TreeNode left, TreeNode right) {
15+
* this.val = val;
16+
* this.left = left;
17+
* this.right = right;
18+
* }
19+
* }
20+
*/
21+
22+
class TreeNode {
23+
int val;
24+
TreeNode left;
25+
TreeNode right;
26+
27+
TreeNode() {
28+
}
29+
30+
TreeNode(int val) {
31+
this.val = val;
32+
}
33+
34+
TreeNode(int val, TreeNode left, TreeNode right) {
35+
this.val = val;
36+
this.left = left;
37+
this.right = right;
38+
}
39+
40+
public void setVal(int val) {
41+
this.val = val;
42+
}
43+
44+
public void setLeft(TreeNode left) {
45+
this.left = left;
46+
}
47+
48+
public void setRight(TreeNode right) {
49+
this.right = right;
50+
}
51+
52+
public int getVal() {
53+
return val;
54+
}
55+
56+
public TreeNode getLeft() {
57+
return left;
58+
}
59+
60+
public TreeNode getRight() {
61+
return right;
62+
}
63+
}
64+
65+
class Solution {
66+
int[] preList;
67+
List<Integer> inList;
68+
HashMap<Integer, TreeNode> treeNodes = new HashMap<>();
69+
70+
public TreeNode buildTree(int[] preorder, int[] inorder) {
71+
preList = preorder;
72+
inList = Arrays.asList(Arrays.stream(inorder).boxed().toArray(Integer[]::new));
73+
List<Integer> preL = Arrays.asList(Arrays.stream(preorder).boxed().toArray(Integer[]::new));
74+
75+
int preIndex = 0;
76+
int rootVal = preorder[0];
77+
TreeNode root = new TreeNode(rootVal);
78+
treeNodes.put(rootVal, root);
79+
80+
while (preIndex < preList.length - 1) {
81+
System.out.println(preIndex);
82+
int inIndex = inList.indexOf(preList[preIndex]);
83+
int inNextIndex = inList.indexOf(preList[preIndex + 1]);
84+
85+
TreeNode node = new TreeNode(preList[preIndex + 1]);
86+
treeNodes.put(preList[preIndex + 1], node);
87+
88+
if (inIndex > inNextIndex) {
89+
// 현재 node의 왼쪽 자식으로
90+
TreeNode nowNode = treeNodes.get(preList[preIndex]);
91+
nowNode.setLeft(node);
92+
} else {
93+
// inorder의 앞 중에서 가장 처음 inList에서 앞인게
94+
int value = 0;
95+
int ii = inNextIndex;
96+
while (ii >= 0) {
97+
value = inorder[ii - 1];
98+
int i = preL.indexOf(value);
99+
if (i < preIndex + 1) {
100+
treeNodes.get(preList[i]).setRight(node);
101+
break;
102+
}
103+
ii--;
104+
}
105+
106+
}
107+
108+
preIndex++;
109+
}
110+
111+
return treeNodes.get(rootVal);
112+
}
113+
114+
}
115+
116+

0 commit comments

Comments
 (0)