热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LeetCode:计算从根节点到叶子节点的所有路径数字之和

本文介绍了如何通过深度优先搜索(DFS)算法来解决LeetCode上的一个经典问题——计算二叉树中所有从根节点到叶子节点的路径数字之和。文章不仅提供了详细的解题思路,还附带了Python实现的AC代码。

图片描述

解题思路

此问题可以通过深度优先搜索(DFS)来解决。基本思想是从根节点开始遍历每个节点,并将当前节点的值添加到当前路径上。当到达叶子节点时,将当前路径上的所有数字组合成一个整数,并累加到最终结果中。

AC代码示例

# 定义二叉树节点类
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right

class Solution:
def sumNumbers(self, root: TreeNode) -> int:
def dfs(node, current_number):
if not node.left and not node.right:
return int(current_number)
else:
result = 0
if node.left:
result += dfs(node.left, current_number + str(node.left.val))
if node.right:
result += dfs(node.right, current_number + str(node.right.val))
return result
if not root:
return 0
return dfs(root, str(root.val))

总结与改进

在LeetCode环境中,如果在一个函数内部定义另一个函数并需要访问外部变量,通常需要使用`global`关键字。然而,更好的做法是利用类的属性来避免使用`global`,这可以使代码更加简洁和易于理解。

使用类属性简化代码

class Solution:
def __init__(self):
self.total_sum = 0
def sumNumbers(self, root: TreeNode) -> int:
def dfs(node, current_number):
if not node.left and not node.right:
self.total_sum += int(current_number)
return
if node.left:
dfs(node.left, current_number + str(node.left.val))
if node.right:
dfs(node.right, current_number + str(node.right.val))
if not root:
return 0
dfs(root, str(root.val))
return self.total_sum

推荐阅读
  • 题目概述:给定一棵带颜色节点的树,目标是找到一种方法,通过删除某些边使得每个连通分量内的节点颜色相同。需要计算出所有可能的合法边集的数量。使用动态规划的方法,特别是树形DP来解决问题。 ... [详细]
  • 本文概述了算法的基础概念,包括时间复杂度的计算规则,以及常见的递归算法的时间复杂度分析。同时,详细介绍了数组和链表的基本特性及其操作的时间复杂度,并提供了几个关于链表操作的具体示例。最后,探讨了栈和队列的概念及其应用,包括如何利用这些数据结构解决实际问题。 ... [详细]
  • 可能存在无限递归_递归算法看这一篇就够了|多图
    前言递归是一种非常重要的算法思想,无论你是前端开发,还是后端开发,都需要掌握它。在日常工作中,统计文件夹大小, ... [详细]
  • 本文档旨在帮助开发者回顾游戏开发中的人工智能技术,涵盖移动算法、群聚行为、路径规划、脚本AI、有限状态机、模糊逻辑、规则式AI、概率论与贝叶斯技术、神经网络及遗传算法等内容。 ... [详细]
  • 本文介绍了如何计算给定数组中所有非质数元素的总和,并提供了多种编程语言的实现示例。 ... [详细]
  • 本文探讨了在JavaScript中执行字符串形式代码的多种方法,包括使用eval()函数以及跨页面调用的方法。同时,文章详细介绍了JavaScript中字符串的各种常用方法及其应用场景。 ... [详细]
  • 本文通过探讨React中Context的使用,解决了在多层级组件间传递状态的难题。我们将详细介绍Context的工作原理,并通过实际案例演示其在项目中的具体应用。 ... [详细]
  • Kafka Topic 数据管理与清理策略
    本文探讨了在生产环境中如何有效管理和定期清理Kafka Topic中的数据。介绍了基于时间、日志大小和日志起始偏移量三种清除方式,并重点讲解了基于时间的清除策略及其配置方法。 ... [详细]
  • 本文探讨了在渗透测试中信息收集阶段使用的几种端口扫描技术,包括nmap、masscan、socket、telnet及nc等工具的应用与比较。 ... [详细]
  • 本文详细介绍了 Java 中 freemarker.ext.dom.NodeModel 类的 removeComments 方法,并提供了多个实际使用的代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 深入理解设计模式之观察者模式
    本文详细介绍了观察者模式,这是一种行为设计模式,适用于当对象状态发生变化时,需要通知其他相关对象的场景。文中不仅解释了观察者模式的基本概念,还通过Java代码示例展示了其实现方法。 ... [详细]
  • 本文档提供了一个详细的步骤指南,介绍如何使用Rviz工具将ROS bag文件中存储的点云数据进行可视化处理。 ... [详细]
  • 本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ... [详细]
  • 在尝试通过HTTP请求访问位于http://www.xxx.cn/net/Clicked.asmx的Web服务时,发现输入特定参数后,偶尔会接收到不成功的响应,表现为XML格式的空字符串。此现象并非每次发生,其根本原因尚不明确。 ... [详细]
  • Gradle复合构建详解
    自Gradle 3.3起,复合构建功能得以实现,这是一种能够整合其他独立构建的高级构建模式。本文将详细介绍复合构建与多项目构建的区别,以及如何在实际项目中应用复合构建。 ... [详细]
author-avatar
Jes潔絲琳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有