Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 리트코드
- DP
- 리트코드 자바
- BFS
- 프로그래머스
- 백준 16935
- 인텔리제이 에러
- leetcode 1721
- 프로그래머스 java
- daily challenge
- 자바 리트코드
- 카카오
- java 프로그래머스
- 백준
- dfs
- 파이썬
- Java
- 스택
- 자바 5464
- 자바
- 백준 18222
- 코딩테스트
- 그래프 자바
- leetcode
- 스프링 에러
- 구현
- 분할정복
- 코테
- java leetcode
- 리트코드 1557
Archives
- Today
- Total
레벨업 일지
[Java] leetcode 662. Maximum Width of Binary Tree 본문
문제
https://leetcode.com/problems/maximum-width-of-binary-tree/description/
알아야 할 개념
- BFS 탐색
풀이
배열로 세그먼트 트리 만드는 과정을 연상하여 풀이했다.
root. left -> 현재 idx * 2 + 1
root right -> 현재 idx * 2 + 2
풀이는 다음과 같다.
- 큐를 이용해 BFS를 구현한다.
- 탐색의 각 레벨에서 다음을 반복한다.
- width 시작점인 left와 right 지점을 잡는다.
- Current Node Left 가 존재하면 , idx * 2 +1 을 왼쪽 자식 노드의 인덱스로 잡아 , left, right를 업데이트한다.
- Current Node Right 가 존재하면 , idx * 2 +2 을 오른쪽 자식 노드의 인덱스로 잡아 , left, right를 업데이트한다.
- left , right 둘다 -1 아닌경우만 width값을 계산한다.
- 정답을 리턴한다.
코드
자바
/**
* 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 Pair{
TreeNode n;
int idx;
Pair(TreeNode n, int idx){
this.n = n;
this.idx = idx;
}
public TreeNode getTn(){
return this.n;
}
public int getIdx(){
return this.idx;
}
}
class Solution {
public int widthOfBinaryTree(TreeNode root) {
Queue<Pair> Q = new LinkedList<>();
int L = 0;
int ret = 1;//return value
int idx = 0;
int val = 0;
if(root == null)return 0;
Q.offer(new Pair(root, 0));
while(!Q.isEmpty()){
int size = Q.size();
int left = -1;
int right = -1;
idx = 0;
for(int i =0 ;i < size;i ++){
Pair p = Q.poll();
if(p.getTn().left != null){
val = p.getIdx() * 2 + 1;
if(left == -1)
left = val;
else{
right = val;
}
Q.offer(new Pair(p.getTn().left, val));
}
if(p.getTn().right != null){
val = p.getIdx() * 2 +2;
if(left == -1)
left = val;
else{
right = val;
}
Q.offer(new Pair(p.getTn().right, val));
}
}
if(left != -1 && right != -1)
ret = Math.max(ret, right - left + 1);
L++;
}
return ret;
}
}
'알고리즘 > leetcode' 카테고리의 다른 글
[Java] leetcode 30. Substring with Concatenation of All Words (0) | 2023.05.06 |
---|---|
[Java] leetcode 307. Range Sum Query - Mutable (0) | 2023.05.04 |
leetcode 946. Validate Stack Sequences (0) | 2023.04.13 |
leetcode 508. Most Frequent Subtree Sum (0) | 2023.04.12 |
[Java] leetcode 2390. Removing Stars From a String (0) | 2023.04.11 |
Comments