Skip to content

Commit 9d6f48d

Browse files
committed
construct-binary-tree-from-preorder-and-inorder-traversal
1 parent 521b9e6 commit 9d6f48d

1 file changed

Lines changed: 47 additions & 0 deletions

File tree

  • construct-binary-tree-from-preorder-and-inorder-traversal
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
class Solution {
5+
// ๋น ๋ฅธ ์กฐํšŒ๋ฅผ ์œ„ํ•ด inorder์˜ ๊ฐ’๊ณผ ์ธ๋ฑ์Šค๋ฅผ ์ €์žฅํ•  Map
6+
private Map<Integer, Integer> inMap;
7+
8+
public TreeNode buildTree(int[] preorder, int[] inorder) {
9+
inMap = new HashMap<>();
10+
for (int i = 0; i < inorder.length; i++) {
11+
inMap.put(inorder[i], i);
12+
}
13+
14+
return construct(preorder, 0, preorder.length - 1, 0, inorder.length - 1);
15+
}
16+
17+
private TreeNode construct(int[] preorder, int preStart, int preEnd, int inStart, int inEnd) {
18+
// ๊ธฐ์ € ์กฐ๊ฑด: ๋” ์ด์ƒ ์ฒ˜๋ฆฌํ•  ๋…ธ๋“œ๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
19+
if (preStart > preEnd || inStart > inEnd) {
20+
return null;
21+
}
22+
23+
// 1. preorder์˜ ํ˜„์žฌ ๊ตฌ๊ฐ„ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๊ฐ€ ๋ฃจํŠธ ๋…ธ๋“œ์ž…๋‹ˆ๋‹ค.
24+
int rootVal = preorder[preStart];
25+
TreeNode root = new TreeNode(rootVal);
26+
27+
// 2. inorder์—์„œ ๋ฃจํŠธ์˜ ์œ„์น˜๋ฅผ ์ฐพ์•„ ์™ผ์ชฝ/์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ ๋ฒ”์œ„๋ฅผ ๋‚˜๋ˆ•๋‹ˆ๋‹ค.
28+
int rootIdx = inMap.get(rootVal);
29+
int leftSize = rootIdx - inStart; // ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์— ํฌํ•จ๋œ ๋…ธ๋“œ ๊ฐœ์ˆ˜
30+
31+
// 3. ์žฌ๊ท€์ ์œผ๋กœ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
32+
// preorder ๋ฒ”์œ„: ๋ฃจํŠธ ๋‹ค์Œ(preStart + 1)๋ถ€ํ„ฐ ๊ฐœ์ˆ˜(leftSize)๋งŒํผ
33+
// inorder ๋ฒ”์œ„: ์›๋ž˜ ์‹œ์ž‘์ ๋ถ€ํ„ฐ ๋ฃจํŠธ ์•ž(rootIdx - 1)๊นŒ์ง€
34+
root.left = construct(preorder, preStart + 1, preStart + leftSize,
35+
inStart, rootIdx - 1);
36+
37+
// 4. ์žฌ๊ท€์ ์œผ๋กœ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
38+
// preorder ๋ฒ”์œ„: ์™ผ์ชฝ ์‹๊ตฌ๋“ค ๋๋‚œ ์ง€์  ๋‹ค์Œ(preStart + leftSize + 1)๋ถ€ํ„ฐ ๋๊นŒ์ง€
39+
// inorder ๋ฒ”์œ„: ๋ฃจํŠธ ๋‹ค์Œ(rootIdx + 1)๋ถ€ํ„ฐ ๋๊นŒ์ง€
40+
root.right = construct(preorder, preStart + leftSize + 1, preEnd,
41+
rootIdx + 1, inEnd);
42+
43+
return root;
44+
}
45+
}
46+
47+

0 commit comments

Comments
ย (0)