当前位置: 首页 > 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.gsyq.cn/news/1601695.html

相关文章:

  • 高效抖音无水印视频解析工具架构深度解析:从原理到实战应用
  • [实战指南] 活用John the Ripper:从识别哈希到破解加密压缩包
  • 【JAVA毕设源码分享】基于springboot学院学习资料分享平台的设计与实现(程序+文档+代码讲解+一条龙定制)
  • 如何让AI帮你把任何图片变成可编辑的PSD分层文件?
  • Visual C++运行库一键修复:终极解决方案解决Windows软件启动问题指南
  • TPIC7710EVM评估板深度解析:从硬件设计到软件驱动的汽车电子验证实战
  • 告别重复配置:在VS2022中创建可复用的OpenCV项目模板
  • 5分钟掌握SketchUp STL插件:3D打印文件转换的终极指南
  • 免费开源虚拟桌面伴侣:Mate Engine让你的桌面活起来
  • 从YT9218芯片看国产交换机的工业场景落地与成本优势
  • PDMS Pipeline Tool 实战指南(一):从零到一的部署与集成
  • ENSP实战:基于EVPN构建VXLAN数据中心网络
  • 免费解锁WeMod Pro的终极指南:3步轻松获取高级功能
  • 从0到挖SRC漏洞全流程详细讲解,耐心看完拿下第一桶金只是时间问题!
  • 5步解锁被锁的iPhone:applera1n帮你免费绕过iOS 15-16激活锁
  • 3步攻克飞行控制难题:用PIDtoolbox从黑盒数据到精准调参的完整指南
  • 终极指南:3步用novideo_srgb免费校准广色域显示器色彩
  • D3keyHelper深度解析:暗黑破坏神3智能宏配置完全指南
  • AMD Ryzen处理器调试终极指南:免费开源工具SMUDebugTool完全教程
  • 如何专业使用AMD Ryzen处理器调试工具:完整实战指南与性能优化技巧
  • PDF文件内部结构解析——交叉引用表、对象流与Acrobat增量更新的实现机制
  • 3步实现企业级容器镜像加速:解决跨国网络镜像拉取难题
  • 文件上传XSS全链路防御:从原理到实战的纵深安全模型
  • 3步高效解决ComfyUI BrushNet张量尺寸冲突:从错误诊断到实战优化
  • Unity Mod Manager终极教程:5分钟学会Unity游戏模组管理
  • 3步快速找回QQ号:手机号逆向查询完整实用指南
  • CVE-2024-50623漏洞复现:从SQL注入原理到宏景eHR实战利用
  • 喜利普厨房空调哪家靠谱
  • 如何用League Akari在3分钟内提升你的英雄联盟游戏体验
  • APT攻击防御实战:从鱼叉钓鱼到纵深安全体系建设