2022년 02월 27일 일요일 - 홀덤펍 개꿀잼!
오늘 올려볼 문제는 662번 Maximum Width of Binary Tree 이라는 문제이다.
사진을 클릭하면 해당 문제로 이동합니다.
오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.
오늘 문제 생각보다 까다로웠다...
입력
사진에서도 볼 수 있듯이 이진 트리의 root Node가 입력으로 들어온다.
풀이 및 코드
트리의 최대 넓이를 구하고 리턴하는 문제다.
처음에는 bfs로 트리를 순회하면서 중간중간 큐의 크기로 넓이를 업데이트 해주려했다.
하지만 null을 제외하고 큐에 저장하면 제대로 된 넓이를 알수가 없었다.
그래서 해쉬맵에 해당 노드가 index로 몇번째 노드인지 저장하고 null이 아니면 개수를 더하는 방식으로 구현했지만 time limit exceed가 났다.
그래서 생각해낸 것이 애초에 트리에 index 마킹을 하고 bfs를 하면서 index를 기반으로 업데이트 하는 방식으로 구현하는 것이다.
이제 코드를 봐보자!
풀이코드
class Solution {
int result = 0;
public int widthOfBinaryTree(TreeNode root) {
Queue<TreeNode> q = new LinkedList<TreeNode>();
root.val = 1;
q.add(root);
bfs(q);
return result;
}
public void bfs(Queue<TreeNode> q)
{
if(q.isEmpty())
return;
Queue<TreeNode> next = new LinkedList<TreeNode>();
int first = 0, last = 0;
for(int i = 0; !q.isEmpty(); i += 2)
{
TreeNode temp = q.poll();
if(temp == null) continue;
if(temp.left != null)
{
temp.left.val = temp.val * 2;
if(first == 0)
first = temp.left.val;
last = temp.left.val;
}
if(temp.right != null)
{
temp.right.val = temp.val * 2 + 1;
if(first == 0)
first = temp.right.val;
last = temp.right.val;
}
result = Math.max(result, last - first + 1);
next.add(temp.left);
next.add(temp.right);
}
bfs(next);
}
}
제출 화면
오늘은 쉬워보였는데 생각보다 까다로웠다.
이런 문제가 내 열망을 자극하는 것 같다.
오늘은 블로그 자동화 프로그램을 만들고 사용한 포스팅이다.
앞으로 블로그를 쓰는데 걸리는 시간이 3분도 안될 것 같다. ㅋㅋㅋㅋ
내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.
'LeetCode 문제 풀이' 카테고리의 다른 글
| [LeetCode] 338번 문제를 풀어보았다. (ft. java) (0) | 2022.03.01 |
|---|---|
| [LeetCode] 228번 문제를 풀어보았다. (ft. java) (0) | 2022.02.28 |
| [LeetCode] 165번 문제를 풀어보았다. (ft. java) (1) | 2022.02.26 |
| [LeetCode] 148번 문제를 풀어보았다. (ft. java) (0) | 2022.02.24 |
| [LeetCode] 133번 문제를 풀어보았다. (ft. java) (1) | 2022.02.23 |