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

Leetcode257. 二叉树的所有路径 Binary Tree Paths - Python递归法/回溯法

因为要求路径,所以得从根节点开始。故用前序遍历法遍历。递归法

思路:

1.递归函数参数及返回值:

参数:根节点root        已走路径path        全局变量result

返回值:无返回值,因为在遇到叶子节点时,就操作了result.append(path) result 已通过全局变量修改

2.递归结束条件:

遇到叶子几点就将已走路径加入result        result.append(path)

注意:

此步用的是        if not root.left and not root.right:       

因为一旦找到叶子节点就要处理逻辑了,即result.append(path)

此外,如果 if not root: return 0 就会把这个空节点也加入路径,费劲

3.单层递归逻辑:

若非叶子节点,则将root.val加入path后,继续递归遍历左右子树。

其中 self.traversal(root.left, path + '->' , result) 的 path + '->' 隐藏了回溯步骤

因为path是一个局部变量,本轮递归函数结束后,就分崩离析了,就回到上一层递归的残局了。即回到了上一轮遍历节点的path路径了。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def binaryTreePaths(self, root: Optional[TreeNode]) -> List[str]:
        if not root: return []
        path = ''
        result = []
        self.traversal(root, path, result)
        return result
    
    def traversal(self, root: 'TreeNode', path: str, result: List[str]) -> None:
        path += str(root.val)
        if not root.left and not root.right:
            result.append(path)
        if root.left: self.traversal(root.left, path + '->' , result)
        if root.right: self.traversal(root.right, path + '->', result)

相关文章:

  • 【操作系统篇】第二篇——计算机系统概述(下)
  • 一箭双雕!刷完阿里 P8 架构师 spring 学习笔记 + 源码剖析,涨薪 8K
  • 【Leetcode刷题Python】牛客. 数组中未出现的最小正整数
  • 汇编语言相关习题
  • Java(二):IDEA使用教程
  • Codeforces Round #826 (Div. 3) E,F
  • MPLS 虚拟专用网络 配置实验
  • AppCode 2022Improves compatibility
  • 【 java 多线程】同步锁 (Lock) 解决线程的安全问题
  • 计算机学院第三周语法组及算法组作业
  • Java数据结构 | 二叉树的基本操作
  • IP分片--为什么单次最大传输1472个字节
  • QT中QThread的各个方法,UI线程关系,事件关系详解(5)
  • Flask-05-——(注册功能的实现,六、1将用户提交的注册数据保存在数据库 六、2 发送AJAX请求 六、3验证码的获取六、4验证码倒计时)
  • 【C++】入门(上)
  • JavaScript-如何实现克隆(clone)函数
  • [deviceone开发]-do_Webview的基本示例
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • Angularjs之国际化
  • exports和module.exports
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Laravel5.4 Queues队列学习
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL几个简单SQL的优化
  • PermissionScope Swift4 兼容问题
  • underscore源码剖析之整体架构
  • Web标准制定过程
  • Web设计流程优化:网页效果图设计新思路
  • Yii源码解读-服务定位器(Service Locator)
  • 从setTimeout-setInterval看JS线程
  • 从tcpdump抓包看TCP/IP协议
  • 从零开始的无人驾驶 1
  • 从重复到重用
  • 浅谈web中前端模板引擎的使用
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #LLM入门|Prompt#1.7_文本拓展_Expanding
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C++20) consteval立即函数
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (Ruby)Ubuntu12.04安装Rails环境
  • (第二周)效能测试
  • (二)PySpark3:SparkSQL编程
  • (论文阅读30/100)Convolutional Pose Machines
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • ./include/caffe/util/cudnn.hpp: In function ‘const char* cudnnGetErrorString(cudnnStatus_t)’: ./incl
  • .Mobi域名介绍
  • .NET Framework .NET Core与 .NET 的区别
  • .Net Framework 4.x 程序到底运行在哪个 CLR 版本之上
  • .net 发送邮件
  • .net 受管制代码
  • :O)修改linux硬件时间
  • @Autowired和@Resource装配