LeetCode 题解工作台
树中找到带权中位节点
给你一个整数 n ,以及一棵 无向带权 树,根节点为节点 0,树中共有 n 个节点,编号从 0 到 n - 1 。该树由一个长度为 n - 1 的二维数组 edges 表示,其中 edges[i] = [u i , v i , w i ] 表示存在一条从节点 u i 到 v i 的边,权重为 w i…
5
题型
0
代码语言
3
相关题
当前训练重点
困难 · 二分·树·traversal
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 二分·树·traversal 题型思路
题目描述
给你一个整数 n,以及一棵 无向带权 树,根节点为节点 0,树中共有 n 个节点,编号从 0 到 n - 1。该树由一个长度为 n - 1 的二维数组 edges 表示,其中 edges[i] = [ui, vi, wi] 表示存在一条从节点 ui 到 vi 的边,权重为 wi。
带权中位节点 定义为从 ui 到 vi 路径上的 第一个 节点 x,使得从 ui 到 x 的边权之和 大于等于 该路径总权值和的一半。
给你一个二维整数数组 queries。对于每个 queries[j] = [uj, vj],求出从 uj 到 vj 路径上的带权中位节点。
返回一个数组 ans,其中 ans[j] 表示查询 queries[j] 的带权中位节点编号。
示例 1:
输入: n = 2, edges = [[0,1,7]], queries = [[1,0],[0,1]]
输出: [0,1]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[1, 0] |
1 → 0 |
[7] |
7 | 3.5 | 从 1 → 0 的权重和为 7 >= 3.5,中位节点是 0。 |
0 |
[0, 1] |
0 → 1 |
[7] |
7 | 3.5 | 从 0 → 1 的权重和为 7 >= 3.5,中位节点是 1。 |
1 |
示例 2:
输入: n = 3, edges = [[0,1,2],[2,0,4]], queries = [[0,1],[2,0],[1,2]]
输出: [1,0,2]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[0, 1] |
0 → 1 |
[2] |
2 | 1 | 从 0 → 1 的权值和为 2 >= 1,中位节点是 1。 |
1 |
[2, 0] |
2 → 0 |
[4] |
4 | 2 | 从 2 → 0 的权值和为 4 >= 2,中位节点是 0。 |
0 |
[1, 2] |
1 → 0 → 2 |
[2, 4] |
6 | 3 | 从 1 → 0 = 2 < 3,从 1 → 2 = 6 >= 3,中位节点是 2。 |
2 |
示例 3:
输入: n = 5, edges = [[0,1,2],[0,2,5],[1,3,1],[2,4,3]], queries = [[3,4],[1,2]]
输出: [2,2]
解释:

| 查询 | 路径 | 边权 | 总路径权值和 | 一半 | 解释 | 答案 |
|---|---|---|---|---|---|---|
[3, 4] |
3 → 1 → 0 → 2 → 4 |
[1, 2, 5, 3] |
11 | 5.5 | 从 3 → 1 = 1 < 5.5,从 3 → 0 = 3 < 5.5,从 3 → 2 = 8 >= 5.5,中位节点是 2。 |
2 |
[1, 2] |
1 → 0 → 2 |
[2, 5] |
7 | 3.5 | 从 1 → 0 = 2 < 3.5,从 1 → 2 = 7 >= 3.5,中位节点是 2。 |
2 |
提示:
2 <= n <= 105edges.length == n - 1edges[i] == [ui, vi, wi]0 <= ui, vi < n1 <= wi <= 1091 <= queries.length <= 105queries[j] == [uj, vj]0 <= uj, vj < n- 输入保证
edges表示一棵合法的树。
解题思路
方法一
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | Depends on the final approach |
| 空间 | Depends on the final approach |
面试官常问的追问
外企场景- question_mark
Understanding binary lifting and LCA is crucial for an efficient solution.
- question_mark
Ability to optimize graph traversal for multiple queries is important.
- question_mark
The candidate should demonstrate a good grasp of dynamic state tracking during traversal.
常见陷阱
外企场景- error
Failing to optimize path sum calculations for multiple queries can lead to time inefficiencies.
- error
Incorrectly handling edge weights during path traversal, especially with large values.
- error
Not efficiently using binary lifting and LCA to reduce the time complexity for querying.
进阶变体
外企场景- arrow_right_alt
Modify the problem to handle directed trees with varying edge directions.
- arrow_right_alt
Add constraints that force the use of a specific traversal strategy (e.g., DFS or BFS).
- arrow_right_alt
Extend the problem to handle dynamic edge weights that change during query resolution.