diff --git a/binary-tree-level-order-traversal/rivkode.java b/binary-tree-level-order-traversal/rivkode.java new file mode 100644 index 000000000..89d91a33e --- /dev/null +++ b/binary-tree-level-order-traversal/rivkode.java @@ -0,0 +1,82 @@ +/* +BFS를 사용한 이유는 depth 가 기준이 되어야 하기 때문이다. +depth 별로 value값을 넣어야하기 때문에 BFS로 탐색하며 해당하는 모든 값들을 List에 넣어주었다. +이때 포인트는 몇개의 값들을 depth 별로 나눌것인가 ? 인데 왜냐하면 queue는 자식 노드들을 탐색하며 지속적으로 추가되기 때문이다. +그래서 2중으로 loop를 돌아야 한다. +첫번째는 while문으로 queue가 empty될때까지 확인하는 loop이고 +두번째는 queue 사이즈를 미리 계산하여 특정 level의 개수 만큼 도는 for loop 이다. +이렇게 2번 loop를 돌면 depth 별로 size를 알 수 있게된다. +*/ + +/** + * 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; + * } + * } + */ +import java.util.*; + +class Solution { + public List> levelOrder(TreeNode root) { + Queue queue = new LinkedList<>(); + List> result = new ArrayList<>(); + + if (root == null) { + return new ArrayList<>(); + } + + queue.offer(root); + + while(!queue.isEmpty()) { + List levelList = new ArrayList<>(); + int queueSize = queue.size(); + + for (int i=0; i= nums.length) { +// return 0; +// } + +// // idx가 nums의 끝에 도달했을 경우 first의 여부에 따라 결과값이 바뀐다. +// if (idx == nums.length - 1) { +// // 첫번째를 방문시 마지막은 사용불가 +// if (first) { +// return 0; +// } else { +// return nums[nums.length - 1]; +// } +// } + +// // 현재 집을 털었을때 현재 idx의 값과 다음 집을 턴 최대값 +// int curRob = nums[idx] + dfs(nums, idx + 2, first); +// // 현재 집을 건너뛸때 다음 idx의 값으로 다음 집을 턴 최대값 +// int nextRob = dfs(nums, idx + 1, first); + +// return Math.max(curRob, nextRob); +// } +// } +