Height of Binary Tree After Subtree Removal Queries
HardArrayTreeDepth-First SearchBreadth-First SearchBinary Tree
Solution
import { TreeNode } from '@algorithm/lib';
export function treeQueries(root: TreeNode | null, queries: number[]): number[] {
const results = new Map<number, number>();
const heights = new Map<number, number>();
function getHeight(node: TreeNode | null): number {
if (node === null) {
return -1;
}
if (heights.has(node.val)) {
return heights.get(node.val)!;
}
const height = 1 + Math.max(getHeight(node.left), getHeight(node.right));
heights.set(node.val, height);
return height;
}
function dfs(node: TreeNode | null, depth: number, maxValue: number): void {
if (node === null) {
return;
}
results.set(node.val, maxValue);
dfs(node.left, depth + 1, Math.max(maxValue, depth + 1 + getHeight(node.right)));
dfs(node.right, depth + 1, Math.max(maxValue, depth + 1 + getHeight(node.left)));
}
dfs(root, 0, 0);
return queries.map((q) => results.get(q)!);
}
Complexity
- Time:
O(N + M)
- Space:
O(N)