Leetcode Java N-ary Tree Level Order Traversal
업데이트:
문제
코드
/*
// Definition for a Node.
class Node {
public int val;
public List<Node> children;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, List<Node> _children) {
val = _val;
children = _children;
}
};
*/
class Solution {
public List<List<Integer>> levelOrder(Node root) {
List<List<Integer>> list = new ArrayList<>();
if (root != null) {
this.recursive(root, list, 0);
}
return list;
}
private void recursive(Node root, List<List<Integer>> list, int level) {
if (list.size() <= level) {
list.add(new ArrayList<>());
}
list.get(level).add(root.val);
for (Node node : root.children) {
this.recursive(node, list, level + 1);
}
}
}
결과
설명
-
주어진 Node가 주어지면 level 별 val 값을 묶어서 반환하는 문제이다.
-
결과를 담을 List인 list를 ArrayList로 초기화한다.
-
root가 null이 아닌 경우 4번에서 정의한 recursive(Node root, List<List
> list, int level) 메서드를 level 0으로 수행한다. - 재귀 호출을 이용하여 list에 level 별 노드의 val 값을 넣을 recursive(Node root, List<List
> list, int level) 메서드를 정의한다. - list의 크기가 level 이하인 경우, list에 새 ArrayList를 넣어준다.
- list의 level번째 List를 가져와 root의 val 값을 넣어준다.
- root의 children을 반복하여 재귀 호출을 $level + 1$로 수행한다.
- 결과를 넣은 list를 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기