Skip to content

Commit 2008b8f

Browse files
committed
rivkode binary tree level order traversal
1 parent 96e85ba commit 2008b8f

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
/*
2+
BFS를 사용한 이유는 depth 가 기준이 되어야 하기 때문이다.
3+
depth 별로 value값을 넣어야하기 때문에 BFS로 탐색하며 해당하는 모든 값들을 List에 넣어주었다.
4+
이때 포인트는 몇개의 값들을 depth 별로 나눌것인가 ? 인데 왜냐하면 queue는 자식 노드들을 탐색하며 지속적으로 추가되기 때문이다.
5+
그래서 2중으로 loop를 돌아야 한다.
6+
첫번째는 while문으로 queue가 empty될때까지 확인하는 loop이고
7+
두번째는 queue 사이즈를 미리 계산하여 특정 level의 개수 만큼 도는 for loop 이다.
8+
이렇게 2번 loop를 돌면 depth 별로 size를 알 수 있게된다.
9+
*/
10+
11+
/**
12+
* Definition for a binary tree node.
13+
* public class TreeNode {
14+
* int val;
15+
* TreeNode left;
16+
* TreeNode right;
17+
* TreeNode() {}
18+
* TreeNode(int val) { this.val = val; }
19+
* TreeNode(int val, TreeNode left, TreeNode right) {
20+
* this.val = val;
21+
* this.left = left;
22+
* this.right = right;
23+
* }
24+
* }
25+
*/
26+
import java.util.*;
27+
28+
class Solution {
29+
public List<List<Integer>> levelOrder(TreeNode root) {
30+
Queue<TreeNode> queue = new LinkedList<>();
31+
List<List<Integer>> result = new ArrayList<>();
32+
33+
if (root == null) {
34+
return new ArrayList<>();
35+
}
36+
37+
queue.offer(root);
38+
39+
while(!queue.isEmpty()) {
40+
List<Integer> levelList = new ArrayList<>();
41+
int queueSize = queue.size();
42+
43+
for (int i=0; i<queueSize; i++) {
44+
TreeNode node = queue.poll();
45+
if (node == null) {
46+
continue;
47+
}
48+
49+
levelList.add(node.val);
50+
51+
if (node.left != null) {
52+
queue.offer(node.left);
53+
}
54+
55+
if (node.right != null) {
56+
queue.offer(node.right);
57+
}
58+
}
59+
result.add(levelList);
60+
}
61+
62+
return result;
63+
}
64+
65+
public class TreeNode {
66+
int val;
67+
TreeNode left;
68+
TreeNode right;
69+
70+
TreeNode() {}
71+
TreeNode(int val) { this.val = val; }
72+
TreeNode(int val, TreeNode left, TreeNode right) {
73+
this.val = val;
74+
this.left = left;
75+
this.right = right;
76+
}
77+
}
78+
}
79+
80+
81+
82+

0 commit comments

Comments
 (0)