当前位置: 首页 > 面试经验 >

2024年华为OD机试真题- 传递悄悄话

优质
小牛编辑
70浏览
2024-07-10

2024年华为OD机试真题- 传递悄悄话

华为OD机试真题-传递悄悄话-2024年OD统一考试(D卷)

题目描述:

给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。

初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。

输入描述:

给定二叉树

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 
 类似资料: