当前位置: 首页 > news >正文

经典算法实例:从根到叶的二进制数之和

我们先来看题目描述:

在二维平面上的 x 轴上,放置着一些方块。

给出一棵二叉树,其上每个结点的值都是 0 或 1 。每一条从根到叶的路径都代表一个从最高有效位开始的二进制数。

例如,如果路径为 0 -> 1 -> 1 -> 0 -> 1 ,那么它表示二进制数 01101 ,也就是 13 。

对树上的每一片叶子,我们都要找出从根到该叶子的路径所表示的数字。

返回这些数字之和。题目数据保证答案是一个 32 位整数。

示例 1 :

输入:root = [1,0,1,0,1,0,1] 输出:22 解释:(100) + (101) + (110) + (111) = 4 + 5 + 6 + 7 = 22

示例 2:

输入:root = [0] 输出:0

提示:

树中的节点数在 [1, 1000] 范围内

Node.val 仅为 0 或 1

解决方案

方法:递归

后序遍历的访问顺序为:左子树——右子树——根节点。我们对根节点 root 进行后序遍历:

如果节点是叶子节点,返回它对应的数字 val 。
如果节点是非叶子节点,返回它的左子树和右子树对应的结果之和。

代码

Python3

class Solution: def sumRootToLeaf(self, root: Optional[TreeNode]) -> int: def dfs(node: Optional[TreeNode], val: int) -> int: if node is None: return 0 val = (val << 1) | node.val if node.left is None and node.right is None: return val return dfs(node.left, val) + dfs(node.right, val) return dfs(root, 0) Java

C++

class Solution { public: int dfs(TreeNode *root, int val) { if (root == nullptr) { return 0; } val = (val << 1) | root->val; if (root->left == nullptr && root->right == nullptr) { return val; } return dfs(root->left, val) + dfs(root->right, val); } int sumRootToLeaf(TreeNode* root) { return dfs(root, 0); } };

C

int dfs(struct TreeNode *root, int val) { if (root == NULL) { return 0; } val = (val << 1) | root->val; if (root->left == NULL && root->right == NULL) { return val; } return dfs(root->left, val) + dfs(root->right, val); } int sumRootToLeaf(struct TreeNode* root){ return dfs(root, 0); }
http://www.jsqmd.com/news/1089745/

相关文章:

  • 为什么你的电脑风扇总在“抽风“?Fan Control如何用智能控制终结噪音困扰
  • 终极指南:如何使用Fan Control彻底掌控Windows电脑风扇噪音
  • 【2027最新】基于SpringBoot+Vue的智慧社区管理系统管理系统源码+MyBatis+MySQL
  • OpenGL GLSL texture()函数:从采样器绑定到纹理坐标的深度解析
  • CobaltStrike提权实战:从UAC绕过到PowerUp自动化权限提升
  • PBI-从数据到洞察:告别Excel卡顿,三步构建动态商业视图
  • AFE5808A超声模拟前端:CW波束成形与流水线ADC架构深度解析
  • 高效抖音无水印视频解析工具架构深度解析:从原理到实战应用
  • 知医邦AI不玩九种体质,全覆盖中医临床内涵
  • 计算机专业就业:项目里真正好用的做法
  • TVA在具身智能产业化体系的落地案例详解(8)
  • 如何快速绕过iOS 15-16激活锁:AppleRa1n免费工具完整指南
  • [实战指南] 活用John the Ripper:从识别哈希到破解加密压缩包
  • Visual C++运行库合集AIO:3分钟解决Windows软件依赖难题
  • 从M2引擎到服务器:全面诊断传奇卡顿掉线的技术根源与调优实战
  • 【IPD模板实战指南】四大核心模板的深度解析与应用
  • 如何永久保存微信聊天记录:留痕工具的完整指南
  • 【JAVA毕设源码分享】基于springboot学院学习资料分享平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 今天不学这8个动态变量技巧,你的ChatGPT输出永远停留在“泛泛而谈”阶段
  • 如何让AI帮你把任何图片变成可编辑的PSD分层文件?
  • Visual C++运行库一键修复:终极解决方案解决Windows软件启动问题指南
  • Reset Windows Update Tool:Windows更新故障修复终极指南
  • TPIC7710EVM评估板深度解析:从硬件设计到软件驱动的汽车电子验证实战
  • MPC Video Renderer终极指南:如何快速解决视频渲染器常见问题
  • 高速DAC时钟与配置实战:DAC5681Z硬件设计与寄存器编程详解
  • PyCharm调试多进程训练脚本:从“帧不可用”到高效定位的实战指南
  • 5分钟掌握SketchUp STL插件:3D打印文件转换的终极指南
  • sra_benchmark与TensorFlow Serving集成:打造高性能搜推模型服务端的终极指南
  • Three.js 视频碎片教程
  • 浏览器音乐解密革命:Unlock-Music如何让你真正拥有数字音乐