안녕하세요!
서류를 적기 싫어서.. 알고리즘을 풀어온 저입니다 ㅎㅎ
오늘은 5월 3주차 6번째 알고리즘인 Binary Tree Level Order Traversal 풀이를 작성해보겠습니다.
요약
주어진 Binary Tree
에서 level
별로 node
의 value
를 리스트에 넣어서 return하는 문제입니다.
dfs
알고리즘을 활용해서level
을 증가할수록 리스트에value
를 저장하는 방식을 사용했습니다.
처음 생각한 방식으로 Accept를 받았습니다.
알고리즘 공부하기 전에는 트리 문제가 나오면 엄청 힘들었었는데, 지금은 나름 생각하고 풀 수 있게된 것 같아서 뿌듯하네요 >.<
이제 코드를 설명하도록 하겠습니다.
List<List<Integer>> result;
전역으로 return할 result
를 선언합니다.
result = new ArrayList<>();
dfs(root, 0);
솔루션 함수에서 result
를 초기화해주고 dfs
함수를 실행합니다.
dfs 함수
private void dfs(TreeNode node, int index) {
if (node == null) return;
if (result.size() <= index) result.add(new ArrayList<>());
result.get(index).add(node.val);
dfs(node.left, index + 1);
dfs(node.right, index + 1);
}
Binary Tree
와 트리의 레벨을 의미하는 index
를 인자로 받습니다.
**dfs
의 종료 조건은 node
가 없을 때 return**합니다.
result
를 ArrayList
로 선언했기 때문에 size
가 index
보다 작거나 같다는 것은 아직 해당 레벨의 노드를 리스트에 추가하지 않았다는 것을 의미합니다.
그래서 해당 경우에는 new ArrayList<>()
를 add
했습니다.
그것이 아니라면 해당 레벨의 노드가 적어도 하나가 저장되어있다는 것이므로, index
로 접근해서 node.val
를 저장해줍니다.
그리고 아래 레벨로 내려가면서 node.val
을 저장하기 위해 dfs
함수를 재귀호출해줍니다.
class Solution {
List<List<Integer>> result;
public List<List<Integer>> levelOrder(TreeNode root) {
result = new ArrayList<>();
dfs(root, 0);
return result;
}
private void dfs(TreeNode node, int index) {
if (node == null) return;
if (result.size() <= index) result.add(new ArrayList<>());
result.get(index).add(node.val);
dfs(node.left, index + 1);
dfs(node.right, index + 1);
}
}
현재 시간이 새벽 2시가 조금 넘은 시간인데, 나름 수월하게 푼 문제라서 다행입니다.
만약 어려운 문제였다면,, 새벽부터 좌절하고 잠에 들었을 것 같네요.
이번 포스팅도 읽어주셔서 감사합니다 :) 질문이나 피드백은 언제나 환영이에요!