题目描述:
给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。
初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。
输入描述:
给定二叉树
0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2
注:-1表示空节点
输出描述:
返回所有节点都接收到悄悄话花费的时间38
示例1
输入:
0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2
输出:
38
说明:
C++解法:
#include <iostream> #include <queue> #include <vector> using namespace std; queue<int> q; int result = 0; void check(int index, vector<int>& nums, int father) { if (index < nums.size() && nums[index] != -1) { nums[index] += nums[father]; q.push(index); if (nums[index] > result) { result = nums[index]; } } } int main() { string input_str; getline(cin, input_str); stringstream ss(input_str); int num; vector<int> nums; while (ss >> num) { nums.push_back(num); } q.push(0); while (!q.empty()) { int father = q.front(); q.pop(); check(2 * father + 1, nums, father); check(2 * father + 2, nums, father); } cout << result << endl; return 0; }
Java解法:
import java.util.*; public class Main { public static void