Skip to content

Commit 1f82109

Browse files
committed
add construct binary tree from preorder and inorder traversal solution
1 parent ec63507 commit 1f82109

File tree

1 file changed

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

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* public class TreeNode {
7+
* int val;
8+
* TreeNode left;
9+
* TreeNode right;
10+
* TreeNode() {}
11+
* TreeNode(int val) { this.val = val; }
12+
* TreeNode(int val, TreeNode left, TreeNode right) {
13+
* this.val = val;
14+
* this.left = left;
15+
* this.right = right;
16+
* }
17+
* }
18+
*/
19+
class Solution {
20+
21+
private Map<Integer, Integer> inorderIndexMap;
22+
private int preorderIndex = 0;
23+
24+
public TreeNode buildTree(int[] preorder, int[] inorder) {
25+
26+
inorderIndexMap = new HashMap<>();
27+
for (int i = 0; i < inorder.length; i++) {
28+
inorderIndexMap.put(inorder[i], i);
29+
}
30+
31+
return buildTree(preorder, 0, inorder.length - 1);
32+
33+
}
34+
35+
private TreeNode buildTree(int[] preorder, int start, int end) {
36+
if (start > end) {
37+
return null;
38+
}
39+
40+
int rootVal = preorder[preorderIndex++];
41+
// root ์ƒ์„ฑ
42+
TreeNode root = new TreeNode(rootVal);
43+
44+
int inorderIndex = inorderIndexMap.get(rootVal);
45+
46+
// ๋ถ„ํ•  ์ •๋ณต ๋ฐฉ์‹์œผ๋กœ ์ขŒ์ธก๊ณผ ์šฐ์ธก ํŠธ๋ฆฌ์— ๋Œ€ํ•œ ์ •๋ณด ํƒ์ƒ‰
47+
// preorder์˜ 0๋ฒˆ์งธ = head
48+
// inorder ๊ธฐ์ค€์œผ๋กœ ๋ดค์„ ๋•Œ
49+
// root์˜ ์ขŒ์ธก์€ ์ขŒ์ธก ์„œ๋ธŒํŠธ๋ฆฌ, ์šฐ์ธก์€ ์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ
50+
// ์ขŒ์šฐ์ธก ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๊ฐ๊ฐ ๋ถ„ํ• ํ•ด์„œ ํƒ์ƒ‰ ์ง„ํ–‰
51+
// ๋ถ„ํ• ํ•œ preorder์˜ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ = ํ•ด๋‹น ํŠธ๋ฆฌ์˜ head
52+
// depth 0 => head 3, left side => [9], right side => [15, 20, 7]
53+
// depth 1 =>
54+
// left => head 9 => search node ๋” ์ด์ƒ ์—†์Œ
55+
// right => head 20 => left side => [15], right side => [7]
56+
// depth 2 =>
57+
// left => head 15 => ๋”๋Š” ํƒ์ƒ‰ํ•  ๋…ธ๋“œ ์—†์Œ
58+
// right => head 7 => ๋”๋Š” ํƒ์ƒ‰ํ•  ๋…ธ๋“œ ์—†์Œ
59+
root.left = buildTree(preorder, start, inorderIndex - 1);
60+
root.right = buildTree(preorder, inorderIndex + 1, end);
61+
62+
return root;
63+
}
64+
}
65+

0 commit comments

Comments
ย (0)