news 2026/1/9 16:54:19

1.5 - 二叉树中的最大路径 C++的类型转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
1.5 - 二叉树中的最大路径 C++的类型转换

目录

1.二叉树中的最大路径

a.核心思想

b.思路

c.步骤

2.C++的类型转换


1.二叉树中的最大路径

124. 二叉树中的最大路径和 - 力扣(LeetCode)https://leetcode.cn/problems/binary-tree-maximum-path-sum/description/

/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), * right(right) {} * }; */ class Solution { public: int max_sum; // 全局变量,记录最大路径和 int dfs(TreeNode* node) { if (node == nullptr) return 0; // 递归计算左右子树的最大贡献值,如果为负则取0 int left_gain = std::max(dfs(node->left), 0); int right_gain = std::max(dfs(node->right), 0); // 计算以当前节点为根的路径和 int price_newpath = node->val + left_gain + right_gain; // 更新最大路径和 max_sum = std::max(max_sum, price_newpath); // 返回当前节点的值加上左右子树中较大的贡献值 return node->val + std::max(left_gain, right_gain); } int maxPathSum(TreeNode* root) { max_sum = INT_MIN; dfs(root); return max_sum; } };

a.核心思想

利用深度优先搜索(DFS)遍历二叉树,在遍历过程中维护当前路径的节点值之和以及当前路径的最大值。由于路径可以从任意节点开始和结束,因此在递归到每个节点时,需要考虑以该节点为路径的一部分的情况,同时更新最大路径和。

b.思路

① 使用后序遍历(左右根)的方式遍历二叉树,这样可以先处理子节点,再处理父节点。

② 在递归过程中,维护一个全局变量max_sum来记录当前找到的最大路径和。

③ 对于每个节点,计算其左右子树的最大贡献值(如果贡献值为负则取0,因为负贡献会减小路径和),然后将当前节点的值与左右子树的贡献值相加,得到以当前节点为根的路径和。

④ 更新max_sum,然后返回当前节点的值加上左右子树中较大的贡献值(因为路径只能选择一条分支继续向上延伸)。

c.步骤

① 定义一个全局变量max_sum初始化为一个很小的值(例如INT_MIN)。

② 编写递归函数dfs,参数为当前节点node

③ 在dfs函数中:

  • 如果节点为空,返回0。

  • 递归计算左右子树的最大贡献值left_gainright_gain

  • 计算以当前节点为根的路径和price_newpath

  • 更新max_sum

  • 返回当前节点的值加上左右子树中较大的贡献值。

④ 调用dfs函数从根节点开始遍历。

⑤ 返回max_sum

2.C++的类型转换

C++类型转换分为显式类型转换和隐式类型转换,显式转换推荐使用四种类型转换操作符:

  1. static_cast

    1. 用于基本类型转换(如intdouble)、有继承关系的指针/引用向上转型(安全)或向下转型(需确保类型正确)。

    2. 示例:double d = static_cast<double>(5);

  2. dynamic_cast

    1. 用于有继承关系的指针/引用向下转型,运行时检查类型安全。指针转换失败返回nullptr,引用转换失败抛出std::bad_cast异常。

    2. 示例:Derived* d = dynamic_cast<Derived*>(basePtr);

  3. const_cast

    1. 仅用于添加/移除const属性(如const int*int*),不可修改原始const对象。

    2. 示例:int* p = const_cast<int*>(&constVar);

  4. reinterpret_cast

    1. 用于底层二进制重新解释(如指针转整数、结构体指针互转),高度危险,依赖平台实现。

    2. 示例:int i = *reinterpret_cast<int*>(ptr);

C风格转换(如(int)3.14)隐式且不安全,C++推荐优先使用上述操作符明确转换意图。隐式类型转换由编译器自动完成(如double赋值给int会截断小数),需注意精度损失或溢出风险。

希望这些内容对大家有所帮助!

感谢大家的三连支持!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/6 4:11:20

CVAT与AI结合:如何用智能标注提升开发效率

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于CVAT的AI辅助标注系统&#xff0c;支持以下功能&#xff1a;1. 自动检测图像中的物体并生成初始标注框&#xff1b;2. 提供智能修正建议&#xff0c;减少人工调整时间…

作者头像 李华
网站建设 2026/1/6 4:11:13

Windows系统下vivado安装详细步骤图文说明

从零开始搭建FPGA开发环境&#xff1a;Windows下Vivado安装实战全记录 你有没有经历过这样的时刻&#xff1f; 刚拿到一块Nexys或Arty开发板&#xff0c;满心期待地打开电脑准备“点灯”&#xff0c;结果第一步—— Vivado安装 就卡住了。下载一半失败、驱动装不上、许可证激…

作者头像 李华
网站建设 2026/1/6 4:10:39

CPU模式可用吗?无GPU环境下的备选方案探讨

CPU模式可用吗&#xff1f;无GPU环境下的备选方案探讨 在播客制作、有声书生成和虚拟访谈等长文本语音内容日益增长的今天&#xff0c;一个现实问题摆在开发者和创作者面前&#xff1a;没有独立GPU&#xff0c;能否完成高质量的多角色对话级语音合成&#xff1f; 传统答案可能是…

作者头像 李华
网站建设 2026/1/6 4:09:14

Qwen3-4B深度测评:40亿参数AI如何实现思维自由切换?

Qwen3-4B深度测评&#xff1a;40亿参数AI如何实现思维自由切换&#xff1f; 【免费下载链接】Qwen3-4B Qwen3-4B&#xff0c;新一代大型语言模型&#xff0c;集稠密和混合专家&#xff08;MoE&#xff09;模型于一体。突破性提升推理、指令遵循、代理能力及多语言支持&#xff…

作者头像 李华
网站建设 2026/1/6 4:08:45

小模型推理新突破:trlm-135m三阶段训练全解析

小模型推理新突破&#xff1a;trlm-135m三阶段训练全解析 【免费下载链接】trlm-135m 项目地址: https://ai.gitcode.com/hf_mirrors/Shekswess/trlm-135m 导语&#xff1a;参数规模仅1.35亿的Tiny Reasoning Language Model (trlm-135m)通过创新的三阶段训练流程&…

作者头像 李华
网站建设 2026/1/6 4:08:22

Qwen3-30B-A3B大升级:256K上下文+推理能力暴涨

Qwen3-30B-A3B大升级&#xff1a;256K上下文推理能力暴涨 【免费下载链接】Qwen3-30B-A3B-Instruct-2507 项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-30B-A3B-Instruct-2507 Qwen3-30B-A3B-Instruct-2507版本重磅发布&#xff0c;带来256K超长上下文支持…

作者头像 李华