From 75656a132f089a3f2d205f49f3ed8af519c05aea Mon Sep 17 00:00:00 2001 From: rain84 Date: Sat, 26 Oct 2024 18:25:02 +0300 Subject: [PATCH 1/2] feat: add solutions to lc problem: No.2458 --- .../README.md | 100 ++++++++++++++++++ .../README_EN.md | 100 ++++++++++++++++++ .../Solution2.js | 40 +++++++ .../Solution2.ts | 40 +++++++ 4 files changed, 280 insertions(+) create mode 100644 solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.js create mode 100644 solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.ts diff --git a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md index 15fb797234463..8be08ee5e6b70 100644 --- a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md +++ b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md @@ -289,4 +289,104 @@ func treeQueries(root *TreeNode, queries []int) (ans []int) { + + +### Solution 2: One DFS + Sorting + + + +#### TypeScript + +```ts +function treeQueries(root: TreeNode | null, queries: number[]): number[] { + const ans: number[] = []; + const levels: Map = new Map(); + const valToLevel = new Map(); + + const dfs = (node: TreeNode | null, level = 0): number => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q)!; + const maxes = levels.get(level)!; + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} +``` + +#### JavaScript + +```js +function treeQueries(root, queries) { + const ans = []; + const levels = new Map(); + const valToLevel = new Map(); + + const dfs = (node, level = 0) => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q); + const maxes = levels.get(level); + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} +``` + + + + + diff --git a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README_EN.md b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README_EN.md index f87176a740fe2..41b6a0abf5e53 100644 --- a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README_EN.md +++ b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README_EN.md @@ -283,4 +283,104 @@ func treeQueries(root *TreeNode, queries []int) (ans []int) { + + +### Solution 2: One DFS + Sorting + + + +#### TypeScript + +```ts +function treeQueries(root: TreeNode | null, queries: number[]): number[] { + const ans: number[] = []; + const levels: Map = new Map(); + const valToLevel = new Map(); + + const dfs = (node: TreeNode | null, level = 0): number => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q)!; + const maxes = levels.get(level)!; + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} +``` + +#### JavaScript + +```js +function treeQueries(root, queries) { + const ans = []; + const levels = new Map(); + const valToLevel = new Map(); + + const dfs = (node, level = 0) => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q); + const maxes = levels.get(level); + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} +``` + + + + + diff --git a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.js b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.js new file mode 100644 index 0000000000000..b6d7db07a1e9f --- /dev/null +++ b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.js @@ -0,0 +1,40 @@ +function treeQueries(root, queries) { + const ans = []; + const levels = new Map(); + const valToLevel = new Map(); + + const dfs = (node, level = 0) => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q); + const maxes = levels.get(level); + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} diff --git a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.ts b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.ts new file mode 100644 index 0000000000000..4c73339492836 --- /dev/null +++ b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/Solution2.ts @@ -0,0 +1,40 @@ +function treeQueries(root: TreeNode | null, queries: number[]): number[] { + const ans: number[] = []; + const levels: Map = new Map(); + const valToLevel = new Map(); + + const dfs = (node: TreeNode | null, level = 0): number => { + if (!node) return level - 1; + + const max = Math.max(dfs(node.left, level + 1), dfs(node.right, level + 1)); + + if (!levels.has(level)) { + levels.set(level, []); + } + levels.get(level)?.push([max, node.val]); + valToLevel.set(node.val, level); + + return max; + }; + + dfs(root, 0); + + for (const [_, l] of levels) { + l.sort(([a], [b]) => b - a); + } + + for (const q of queries) { + const level = valToLevel.get(q)!; + const maxes = levels.get(level)!; + + if (maxes.length === 1) { + ans.push(level - 1); + } else { + const [val0, max0, max1] = [maxes[0][1], maxes[0][0], maxes[1][0]]; + const max = val0 === q ? max1 : max0; + ans.push(max); + } + } + + return ans; +} From 888bc2debfa0d7fce18f7b920a48938df67569fe Mon Sep 17 00:00:00 2001 From: Libin YANG Date: Sun, 27 Oct 2024 07:50:14 +0800 Subject: [PATCH 2/2] Update README.md --- .../README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md index 8be08ee5e6b70..768a8fea3c50d 100644 --- a/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md +++ b/solution/2400-2499/2458.Height of Binary Tree After Subtree Removal Queries/README.md @@ -291,7 +291,7 @@ func treeQueries(root *TreeNode, queries []int) (ans []int) { -### Solution 2: One DFS + Sorting +### 方法二:一次 DFS + 排序