Skip to content

Commit 2910883

Browse files
committed
add solution : 102. Binary Tree Level Order Traversal
1 parent 13422b1 commit 2910883

File tree

1 file changed

+86
-0
lines changed

1 file changed

+86
-0
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
class TreeNode {
2+
val: number;
3+
left: TreeNode | null;
4+
right: TreeNode | null;
5+
constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
6+
this.val = val === undefined ? 0 : val;
7+
this.left = left === undefined ? null : left;
8+
this.right = right === undefined ? null : right;
9+
}
10+
}
11+
12+
/**
13+
*@link https://leetcode.com/problems/binary-tree-level-order-traversal/
14+
*
15+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• : DFS ์‚ฌ์šฉ
16+
* - ๊ฐ™์€ ๋†’์ด์˜ ๋…ธ๋“œ๋“ค์„ result ๋ฐฐ์—ด์— ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ dfs๋กœ ์žฌ๊ท€ ํ˜ธ์ถœ
17+
* - result ๋ฐฐ์—ด์— ํ˜„์žฌ level์— ๋Œ€ํ•œ ๋ฐฐ์—ด์ด ์—†์œผ๋ฉด ์ถ”๊ฐ€ํ•˜๊ณ , ํ˜„์žฌ ๋…ธ๋“œ์˜ ๊ฐ’์„ push
18+
* - ํ•˜์œ„ ์ž์‹ ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด dfs ์žฌ๊ท€ ํ˜ธ์ถœ (level์€ 1 ์ฆ๊ฐ€)
19+
*
20+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
21+
* - n = ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒ
22+
*
23+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
24+
* - ํŠธ๋ฆฌ ๊ธฐ์šธ์–ด์ง„ ๊ฒฝ์šฐ, ์žฌ๊ท€ ํ˜ธ์ถœ n๋ฒˆ ๋งŒํผ ์Šคํƒ ์‚ฌ์šฉ
25+
*/
26+
27+
function levelOrder(root: TreeNode | null): number[][] {
28+
const result: number[][] = [];
29+
30+
const dfs = (node: TreeNode | null, level: number) => {
31+
if (!node) return;
32+
33+
if (!result[level]) result[level] = [];
34+
35+
result[level].push(node.val);
36+
37+
if (node.left) dfs(node.left, level + 1);
38+
if (node.right) dfs(node.right, level + 1);
39+
};
40+
41+
dfs(root, 0);
42+
43+
return result;
44+
}
45+
46+
/**
47+
*
48+
* ์ ‘๊ทผ ๋ฐฉ๋ฒ• : BFS ์‚ฌ์šฉ
49+
* - ๋™์ผ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ๊ฐ’ ๋‹ด๊ธฐ ์œ„ํ•ด์„œ ํ๋ฅผ ์‚ฌ์šฉ
50+
* - ํƒ์ƒ‰ํ•  ๋…ธ๋“œ๋ฅผ ํ์— ๋จผ์ € ๋‹ด๊ณ , ํ์—์„œ ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด๋ฉด์„œ ๋™์ผ ๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ ๊ฐ’ ๋‹ด๊ธฐ
51+
* - ๋…ธ๋“œ์˜ ์ž์‹๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉด ๋‹ค์‹œ ํ์— ์ถ”๊ฐ€ํ•ด์„œ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ
52+
* - ์ด ๊ณผ์ • ๋ฐ˜๋ณตํ•˜๊ธฐ
53+
*
54+
* ์‹œ๊ฐ„๋ณต์žก๋„ : O(n)
55+
* - n = ๋…ธ๋“œ์˜ ๊ฐœ์ˆ˜, ๋ชจ๋“  ๋…ธ๋“œ ์ˆœํšŒ
56+
*
57+
* ๊ณต๊ฐ„๋ณต์žก๋„ : O(n)
58+
* - ํ์— ๋ชจ๋“  ๋…ธ๋“œ ์ €์žฅํ•จ
59+
*/
60+
61+
function levelOrder(root: TreeNode | null): number[][] {
62+
if (!root) return [];
63+
64+
// ํƒ์ƒ‰ํ•  ๋…ธ๋“œ ๋‹ด์•„๋†“๋Š” ๋Œ€๊ธฐ์ค„
65+
const queue: TreeNode[] = [root];
66+
const result: number[][] = [];
67+
68+
while (queue.length > 0) {
69+
// ๋™์ผ ๋ ˆ๋ฒจ์— ์žˆ๋Š” ๋…ธ๋“œ ๊ฐ’ ๋‹ด๋Š” ์šฉ๋„
70+
const currentLevel: number[] = [];
71+
// queue ์‚ฌ์ด์ฆˆ๊ฐ€ ๋™์ ์œผ๋กœ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฏธ๋ฆฌ ๊ณ„์‚ฐํ•œ ๊ฐ’ ๋ณ€์ˆ˜์— ์ €์žฅ
72+
const size = queue.length;
73+
74+
for (let i = 0; i < size; i++) {
75+
const node = queue.shift()!;
76+
currentLevel.push(node.val);
77+
78+
if (node.left) queue.push(node.left);
79+
if (node.right) queue.push(node.right);
80+
}
81+
82+
result.push(currentLevel);
83+
}
84+
85+
return result;
86+
}

0 commit comments

Comments
ย (0)