Leetcode Java All Possible Full Binary Trees
업데이트:
문제
코드
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<TreeNode> allPossibleFBT(int n) {
return this.dfs(n, new HashMap<>());
}
private List<TreeNode> dfs(int n, Map<Integer, List<TreeNode>> map) {
if (!map.containsKey(n)) {
List<TreeNode> nodeList = new ArrayList<TreeNode>();
if (n == 1) {
TreeNode node = new TreeNode(0);
nodeList.add(node);
} else if (n % 2 == 1) {
for (int x = 0; x < n; x++) {
int y = n - 1 - x;
for (TreeNode left : this.dfs(x, map)) {
for (TreeNode right : this.dfs(y, map)) {
TreeNode node = new TreeNode(0);
node.left = left;
node.right = right;
nodeList.add(node);
}
}
}
}
map.put(n, nodeList);
}
return map.get(n);
}
}
결과
설명
- 노드가 n개인 가능한 모든 이진 TreeNode를 반환하는 문제이다.
- 단, 각 노드의 값은 0이어야 한다.
-
3번에서 정의한 dfs(int n, Map<Integer, List
> map) 메서드에 n과 새 HashMap을 넣어 수행한 결과를 주어진 문제의 결과로 반환한다. - DFS 방식으로 TreeNode의 모든 조합을 만들 dfs(int n, Map<Integer, List
> map) 메서드를 완성한다. - map에 n이 키인 값이 존재하는 경우, 아래를 수행한다.
- n이 1인 경우, 조합의 결과를 넣을 nodeList에 root인 TreeNode를 정의하여 키가 1인 값으로 넣어준다.
- n이 홀수인 경우 자녀 노드를 이어야 하므로, 0부터 n 미만까지 x를 증가시키며 아래를 계속 수행한다.
- y에 $n - 1 - x$를 넣고, x와 map을 이용하여 모든 값에 left를 y와 map을 이용하여 모든 값에 right를 넣어 새 TreeNode의 left TreeNode와 right TreeNode에 차례대로 넣어 noeList에 넣어준다.
- map의 n번째 값을 반환한다.
- map에 n이 키인 값이 존재하는 경우, 아래를 수행한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기