【华为OD机试】2024年真题C卷(Python)-二叉树计算

题目描述:

给定一个二叉树,请设计一个算法,计算二叉树中任意两个不同节点路径的最大值差。节点路径是从根节点到任何叶节点的节点序列。

输入描述:

第一行包含整数 T(1 <= T <= 100),表示测试用例的数量。每个测试用例的第一行是一个整数 N(1 <= N <= 100),表示二叉树的节点数。然后是 N 行,每行包含三个整数 X,L,R(-10000 <= X <= 10000,-1 <= L, R <= N 且 L 和 R 互不相同),表示节点的值和其子节点的索引。如果 L 或 R 是 -1,则表示没有相应的子节点。

输出描述:

对于每个测试用例,输出一个整数,表示任意两个不同节点路径的最大值差。

解法1:




# 二叉树节点定义
class Node:
    def __init__(self, x, left=None, right=None):
        self.val = x
        self.left = left
        self.right = right
 
# 计算二叉树任意两节点路径的最大值差
def maxPathDiff(root):
    def dfs(node):
        if not node:
            return float('-inf'), float('-inf')
        left_max, left_min = dfs(node.left)
        right_max, right_min = dfs(node.right)
        # 计算以当前节点为根的子树的最大路径和
        max_sum = node.val + max(0, max(left_max, left_min) + node.val, max(right_max, right_min) + node.val)
        # 计算以当前节点为根的子树的最小路径和
        min_sum = node.val + min(0, min(left_max, left_min) + node.val, min(right_max, right_min) + node.val)
        # 更新全局最大值差
        global max_diff
        max_diff = max(max_diff, max_sum - min_sum)
        return max_sum, min_sum
 
    max_diff = float('-inf')
    dfs(root)
    return max_diff
 
# 示例用法
# 构建二叉树
root = Node(10, Node(2, Node(3, Node(4), Node(5)), Node(6)), Node(7, Node(8), Node(9)))
# 计算最大值差
print(maxPathDiff(root))  # 输出应为最大值差,例如:1

这段代码首先定义了一个二叉树节点类 Node,然后定义了一个函数 maxPathDiff,该函数接收二叉树的根节点作为参数,并递归遍历二叉树,计算以每个节点为根的子树的最大路径和和最小路径和,并更新全局变量 max_diff 为遇到的最大值差。最后,使用给定的二叉树示例来调用 maxPathDiff 函数并打印结果。

最后修改于:2024年08月16日 10:24

评论已关闭

推荐阅读

DDPG 模型解析,附Pytorch完整代码
2024年11月24日
DQN 模型解析,附Pytorch完整代码
2024年11月24日
AIGC实战——Transformer模型
2024年12月01日
Socket TCP 和 UDP 编程基础(Python)
2024年11月30日
python , tcp , udp
如何使用 ChatGPT 进行学术润色?你需要这些指令
2024年12月01日
AI
最新 Python 调用 OpenAi 详细教程实现问答、图像合成、图像理解、语音合成、语音识别(详细教程)
2024年11月24日
ChatGPT 和 DALL·E 2 配合生成故事绘本
2024年12月01日
omegaconf,一个超强的 Python 库!
2024年11月24日
【视觉AIGC识别】误差特征、人脸伪造检测、其他类型假图检测
2024年12月01日
[超级详细]如何在深度学习训练模型过程中使用 GPU 加速
2024年11月29日
Python 物理引擎pymunk最完整教程
2024年11月27日
MediaPipe 人体姿态与手指关键点检测教程
2024年11月27日
深入了解 Taipy:Python 打造 Web 应用的全面教程
2024年11月26日
基于Transformer的时间序列预测模型
2024年11月25日
Python在金融大数据分析中的AI应用(股价分析、量化交易)实战
2024年11月25日
AIGC Gradio系列学习教程之Components
2024年12月01日
Python3 `asyncio` — 异步 I/O,事件循环和并发工具
2024年11月30日
llama-factory SFT系列教程:大模型在自定义数据集 LoRA 训练与部署
2024年12月01日
Python 多线程和多进程用法
2024年11月24日
Python socket详解,全网最全教程
2024年11月27日