Skip to content

Commit

Permalink
feat : binary-tree
Browse files Browse the repository at this point in the history
  • Loading branch information
imsosleepy committed Dec 21, 2024
1 parent 514006f commit f38fc83
Showing 1 changed file with 36 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
// ํ˜ผ์ž์„œ ๋ชปํ’€์–ด์„œ GPT์˜ ๋„์›€์„ ๋ฐ›์Œ
// ์™œ ๋‘ ๋ฐฐ์—ด์ด ํ•„์š”ํ•œ๊ฐ€?
// ์ „์œ„ ์ˆœํšŒ(preorder): ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ์ •๋ณด๋งŒ์œผ๋กœ๋Š” ๊ฐ ์„œ๋ธŒํŠธ๋ฆฌ๊ฐ€ ์–ด๋Š ๋ถ€๋ถ„์ธ์ง€, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
//
// ์ค‘์œ„ ์ˆœํšŒ(inorder): ํŠธ๋ฆฌ์˜ ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋ฃจํŠธ๋ฅผ ๋ฐฉ๋ฌธํ•œ ํ›„, ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋ฐฉ๋ฌธํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฐ์—ด์„ ํ†ตํ•ด ๋ฃจํŠธ๊ฐ€ ํŠธ๋ฆฌ์˜ ์–ด๋Š ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฃจํŠธ์˜ ์œ„์น˜๋ฅผ ์•Œ๋ฉด, ๊ทธ ์œ„์น˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ๋ฅผ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

// ํ•œ ๋ฐฐ์—ด๋กœ๋Š” ํŠธ๋ฆฌ์˜ ๊ตฌ์กฐ๋ฅผ ๋ณต์›ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ 
// ์ „์œ„ ์ˆœํšŒ๋งŒ์œผ๋กœ๋Š” ๊ฐ ๋…ธ๋“œ์˜ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, [3, 9, 20, 15, 7]๋ผ๋Š” ์ „์œ„ ์ˆœํšŒ ๋ฐฐ์—ด๋งŒ ์žˆ๋‹ค๋ฉด, '9'๊ฐ€ 3์˜ ์™ผ์ชฝ ์ž์‹์ธ์ง€ ์˜ค๋ฅธ์ชฝ ์ž์‹์ธ์ง€ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
// ์ค‘์œ„ ์ˆœํšŒ๋งŒ์œผ๋กœ๋„ ํŠธ๋ฆฌ์˜ ๋ฃจํŠธ๋ฅผ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ๊ฐ ์„œ๋ธŒํŠธ๋ฆฌ์˜ ๊ตฌ์ฒด์ ์ธ ๊ตฌ์กฐ๋ฅผ ์•Œ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
class Solution {
public TreeNode buildTree(int[] preorder, int[] inorder) {
return buildTreeHelper(preorder, inorder, 0, 0, inorder.length - 1);
}

private TreeNode buildTreeHelper(int[] preorder, int[] inorder, int preStart, int inStart, int inEnd) {
if (inStart > inEnd) return null;

int rootVal = preorder[preStart];
TreeNode root = new TreeNode(rootVal);

int rootIndex = -1;
for (int i = inStart; i <= inEnd; i++) {
if (inorder[i] == rootVal) {
rootIndex = i;
break;
}
}

int leftSize = rootIndex - inStart;
root.left = buildTreeHelper(preorder, inorder, preStart + 1, inStart, rootIndex - 1);
root.right = buildTreeHelper(preorder, inorder, preStart + leftSize + 1, rootIndex + 1, inEnd);

return root;
}

}

0 comments on commit f38fc83

Please sign in to comment.