#422. 根到叶子的路径和最大值

根到叶子的路径和最大值

根到叶子的路径和最大值

题目描述

给定一棵用先序遍历(含空指针标记)表示的二叉树(-1 表示空指针),每个节点上有一个整数权值。请计算从根节点出发、到任意叶子节点(左右孩子均为空)的路径上,节点权值之和的最大值。

先序序列构建二叉树模板代码:

struct Node {
    int data;
    Node* left, *right;
};

// 按先序创建,-1 表示空
Node* build() {
    int x; std::cin >> x;
    if (x == -1) return nullptr;
    Node* node = new Node();
    node->data = x;
    node->left  = build();
    node->right = build();
    return node;
}

int main() {
    Node* root = build();
}

输入格式

  • 只有一行,若干个整数,表示二叉树的先序遍历序列,使用 -1 表示空节点。相邻整数以一个空格分隔。先序顺序为:根、左子树、右子树,空子树以 -1 占位。

输出格式

  • 只有一行,一个整数,表示根到叶子路径的最大路径和。

输入输出样例 #1

输入 #1

1 2 -1 -1 3 4 -1 -1 5 -1 -1

输出 #1

9

样例解释 #1

两条根到叶子路径:1→2(和为 3)、1→3→4(和为 8)、1→3→5(和为 9),最大为 9。

说明/提示

  • 约定:输入使用先序遍历(根、左、右),以 -1 作为空指针占位。
  • 若整棵树为空(仅有一个 -1),可约定输出 0
  • 节点权值可能为负;请正确处理只有一个叶子的情况。