Leetcode Java Height of Binary Tree After Subtree Removal Queries
업데이트:
문제
코드
class Solution {
private int[] heights;
private int max;
public int[] treeQueries(TreeNode root, int[] queries) {
this.heights = new int[100001];
this.max = 0;
this.calculateLeftToRight(root, 0);
this.max = 0;
this.calculateRightToLeft(root, 0);
int length = queries.length;
int[] result = new int[length];
for (int i = length - 1; i >= 0; i--) {
result[i] = this.heights[queries[i]];
}
return result;
}
private void calculateLeftToRight(TreeNode node, int height) {
if (node != null) {
this.heights[node.val] = this.max;
this.max = Math.max(this.max, height);
this.calculateLeftToRight(node.left, height + 1);
this.calculateLeftToRight(node.right, height + 1);
}
}
private void calculateRightToLeft(TreeNode node, int height) {
if (node != null) {
this.heights[node.val] = Math.max(this.heights[node.val], this.max);
this.max = Math.max(this.max, height);
this.calculateRightToLeft(node.right, height + 1);
this.calculateRightToLeft(node.left, height + 1);
}
}
}
결과
설명
-
이진 트리인 root에서 queries 내 각 값에 대한 노드를 제거했을 때 트리의 길이를 각각 구하는 문제이다.
- 문제 풀이에 필요한 전역 변수를 정의한다.
- heights는 각 위치 값에 해당하는 노드를 제거하였을 때 길이를 저장할 변수이다.
- max는 root의 가장 긴 높이를 저장한 변수이다.
- 문제 풀이에 필요한 전역 변수를 초기화한다.
- heights에 값의 상한 값보다 1 큰 $10^5 + 1$ 크기의 정수 배열로 초기화한다.
- max를 0으로 초기화한다.
- 좌측에서 우측으로 탐색하기 위한 calculateLeftToRight(TreeNode node, int height)를 아래와 같이 정의 후 height에 0을 넣어 수행한다.
- node가 null이 아닌 경우만 계속 진행한다.
- heights 내 node의 val 값에 해당하는 위치에 max 값을 넣어준다.
- max에 이전까지 최대 높이인 max와 현재 위치의 높이인 height 중 큰 값을 넣어준다.
- node의 left 노드와 right 노드를 이용하여 height를 증가시켜 순차적으로 재귀 호출을 수행한다.
- max를 0으로 초기화하고 우측에서 좌측으로 탐색하기 위한 calculateRightToLeft(TreeNode node, int height)를 아래와 같이 정의 후 height에 0을 넣어 수행한다.
- node가 null이 아닌 경우만 계속 진행한다.
- heights 내 node의 val 값에 해당하는 위치에 해당 위치의 값과 max 값 중 큰 높이를 넣어준다.
- max에 이전까지 최대 높이인 max와 현재 위치의 높이인 height 중 큰 값을 넣어준다.
- node의 right 노드와 left 노드를 이용하여 height를 증가시켜 순차적으로 재귀 호출을 수행한다.
- result는 결과를 저장할 배열로, queries 길이의 정수 배열로 초기화하여 동일한 위치에 heights 내 queries 값을 꺼내 넣어 주어진 문제의 결과로 반환한다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기