Skip to content

Commit f38fc83

Browse files
committed
feat : binary-tree
1 parent 514006f commit f38fc83

File tree

1 file changed

+36
-0
lines changed

1 file changed

+36
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// ํ˜ผ์ž์„œ ๋ชปํ’€์–ด์„œ GPT์˜ ๋„์›€์„ ๋ฐ›์Œ
2+
// ์™œ ๋‘ ๋ฐฐ์—ด์ด ํ•„์š”ํ•œ๊ฐ€?
3+
// ์ „์œ„ ์ˆœํšŒ(preorder): ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ •๋ณด๋งŒ์œผ๋กœ๋Š” ๊ฐ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์–ด๋А ๋ถ€๋ถ„์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
4+
//
5+
// ์ค‘์œ„ ์ˆœํšŒ(inorder): ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•œ ํ›„, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฃจํŠธ๊ฐ€ ํŠธ๋ฆฌ์˜ ์–ด๋А ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ์˜ ์œ„์น˜๋ฅผ ์•Œ๋ฉด, ๊ทธ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
6+
7+
// ํ•œ ๋ฐฐ์—ด๋กœ๋Š” ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ 
8+
// ์ „์œ„ ์ˆœํšŒ๋งŒ์œผ๋กœ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, [3, 9, 20, 15, 7]๋ผ๋Š” ์ „์œ„ ์ˆœํšŒ ๋ฐฐ์—ด๋งŒ ์žˆ๋‹ค๋ฉด, '9'๊ฐ€ 3์˜ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
9+
// ์ค‘์œ„ ์ˆœํšŒ๋งŒ์œผ๋กœ๋„ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๊ฐ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
10+
class Solution {
11+
public TreeNode buildTree(int[] preorder, int[] inorder) {
12+
return buildTreeHelper(preorder, inorder, 0, 0, inorder.length - 1);
13+
}
14+
15+
private TreeNode buildTreeHelper(int[] preorder, int[] inorder, int preStart, int inStart, int inEnd) {
16+
if (inStart > inEnd) return null;
17+
18+
int rootVal = preorder[preStart];
19+
TreeNode root = new TreeNode(rootVal);
20+
21+
int rootIndex = -1;
22+
for (int i = inStart; i <= inEnd; i++) {
23+
if (inorder[i] == rootVal) {
24+
rootIndex = i;
25+
break;
26+
}
27+
}
28+
29+
int leftSize = rootIndex - inStart;
30+
root.left = buildTreeHelper(preorder, inorder, preStart + 1, inStart, rootIndex - 1);
31+
root.right = buildTreeHelper(preorder, inorder, preStart + leftSize + 1, rootIndex + 1, inEnd);
32+
33+
return root;
34+
}
35+
36+
}

0 commit comments

Comments
ย (0)