【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 JS源码实现

C++源码实现:

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 C/C++实现-CSDN博客

Python源码实现:

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 python源码实现-CSDN博客

Java代码实现:

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 Java源码实现_华为od机试真题-传递悄悄话-CSDN博客 C语言代码实现:

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 C语言源码实现【思路+源码】-CSDN博客

题目描述:

给定一个二叉树,每个节点上站着一个人,节点数字表示父节点到该节点传递悄悄话需要花费的时间。
初始时,根节点所在位置的人有一个悄悄话想要传递给其他人,求二叉树所有节点上的人都接收到悄悄话花费的时间。

输入描述

给定二叉树 

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

注:-1表示空节点

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 JS源码实现_第1张图片

输出描述

返回所有节点都接收到悄悄话花费的时间38

示例1

输入输出示例仅供调试,后台判题数据一般不包含示例

输入

0 9 20 -1 -1 15 7 -1 -1 -1 -1 3 2

输出

38

解题思路:

        递归遍历即可得到答案

JS代码实现:

const rl = require("readline").createInterface({ input: process.stdin });
var iter = rl[Symbol.asyncIterator]();
const readline = async () => (await iter.next()).value;

function talk(ps, p, idx, nds) {
  if (idx >= nds.length || nds[idx] === -1) {
    ps.push([...p]);
    return;
  }
  p.push(nds[idx]);
  talk(ps, [...p], idx * 2 + 1, nds);
  talk(ps, [...p], idx * 2 + 2, nds);
}

async function main() {
  const input = await readline();
  const values = input.split(" ").map(Number);
  const nodes = values;
  const ps = [];
  const path = [];
  talk(ps, path, 0, nodes);
  let maxValue = 0;
  for (let pp of ps) {
    let sum = 0;
    for (let p of pp) {
      sum += p;
    }
    if (sum > maxValue) {
      maxValue = sum;
    }
  }
  console.log(maxValue);
}

main();

     4                                                          
                                                            5    |-----|
              +---+                                             |     |
              |   |                                             |     |
              |   | 3                       3                   |     |
              |   |                                             |     |
              |   +---+                   -----                 |     |
              |       |                   |   |                 |     |    |----|3
            2 |       |                 2 |   |     2           |     |    |    |
              |       |                   |   |                 |     |    |    |
          +---+       |               ----+   |   +---+         |     |    |    |
          |           |               |       |   |   |         |     |    |    |
        1 |           | 1           1 |       | 1 |   | 1       |     |    |    |
          |           |               |       |   |   |         |     |    |    |
      +---+           +---+       +---+       +---+   +---+     |     |    |    |
      |                   |       |                       |     |     |    |    |
    0 |                   | 0   0 |                       | 0   |     |    |    |
      |                   |       |                       |     |     |    |    |
  +---+                   +-------+                       +---+ |     +--- |    |+
                                                                      
    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14   15  16  17  18 

【华为OD】统一考试C卷真题 100%通过: 传递悄悄话 二叉树遍历 JS源码实现_第2张图片

你可能感兴趣的:(杂谈,华为od,c语言,javascript,python,java,c++,码蚁软件)