Skip to content

Commit 517b59d

Browse files
committed
add solution: binary tree level order traversal
1 parent d0fafa4 commit 517b59d

File tree

1 file changed

+52
-0
lines changed
  • binary-tree-level-order-traversal

1 file changed

+52
-0
lines changed
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
풀이
3+
- queue 자료구조를 사용하여 풀이합니다
4+
Big O
5+
- N: 노드의 개수
6+
- Time complexity: O(N)
7+
- 모든 노드를 조회합니다
8+
- Space complexity: O(N)
9+
- 반환 결과값인 2차원 배열 levels -> O(N)
10+
- queue -> O(3/4 * N) = O(N)
11+
- 한 층이 가질 수 있는 최대 노드 개수는 약 N / 2
12+
- queue의 크기가 가장 클 때는 두 층의 노드를 가지고 있으므로 N / 2 + (N / 2) / 2 개의 노드를 갖게 됨
13+
- level -> O(N/2) = O(N)
14+
- - 한 층이 가질 수 있는 최대 노드 개수는 약 N / 2
15+
*/
16+
17+
/**
18+
* Definition for a binary tree node.
19+
* type TreeNode struct {
20+
* Val int
21+
* Left *TreeNode
22+
* Right *TreeNode
23+
* }
24+
*/
25+
func levelOrder(root *TreeNode) [][]int {
26+
levels := make([][]int, 0)
27+
28+
if root == nil {
29+
return levels
30+
}
31+
32+
queue := make([]*TreeNode, 0)
33+
queue = append(queue, root)
34+
for len(queue) > 0 {
35+
k := len(queue)
36+
level := make([]int, k)
37+
for i := 0; i < k; i++ {
38+
node := queue[i]
39+
level[i] = node.Val
40+
if node.Left != nil {
41+
queue = append(queue, node.Left)
42+
}
43+
if node.Right != nil {
44+
queue = append(queue, node.Right)
45+
}
46+
}
47+
queue = queue[k:]
48+
levels = append(levels, level)
49+
}
50+
51+
return levels
52+
}

0 commit comments

Comments
 (0)