python-leetcode-二叉树的中序遍历

news/2025/2/23 16:08:31

94. 二叉树的中序遍历 - 力扣(LeetCode)

方法1:递归实现

# 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result = []
        
        def dfs(node):
            if not node:
                return
            dfs(node.left)      # 递归遍历左子树
            result.append(node.val)  # 访问根节点
            dfs(node.right)     # 递归遍历右子树
        
        dfs(root)
        return result

方法2: 迭代实现(栈)

# 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 inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:
        result, stack = [], []
        curr = root

        while curr or stack:
            while curr:  # 先遍历左子树
                stack.append(curr)
                curr = curr.left
            curr = stack.pop()  # 访问根节点
            result.append(curr.val)
            curr = curr.right  # 遍历右子树

        return result


http://www.niftyadmin.cn/n/5863568.html

相关文章

linux常用基础命令_最新版

常用命令 查看当前目录下个各个文件大小查看当前系统储存使用情况查看当前路径删除当前目录下所有包含".log"的文件linux开机启动jar更改自动配置文件后操作关闭自启动linux静默启动java服务查询端口被占用查看软件版本重启关机开机启动取别名清空当前行创建文件touc…

MySQL(高级特性篇)11章——数据库的设计规范

一、为什么需要数据库设计 设计数据表时需考虑的问题: 数据需求:明确用户需要的数据以及需要在数据表中保存的数据数据正确性:在插入、删除、更新数据时,确定进行怎样的约束检查来保证数据的正确性数据冗余:思考如何降…

Java EE初阶-计算机导论

一、cpu的重要指标 核心参数 核心数(Cores) 含义:核心是 CPU 中执行指令的运算单元,核心数代表了 CPU 内独立运算核心的数量。影响:核心数越多,CPU 在同一时间内能够并行处理的任务就越多。例如&#xff…

链表-基础训练(二)链表 day14

两两交换链表中的节点 题目示意: 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 原先我的思路是图像上的思路,但是我感觉还是很复杂…

使用docker开发镜像编译

前言 搭建参考的是官网文档 环境 wsl2 wsl2内存分配和禁用swap 在window主机中,按下快捷键win+r,输入%UserProfile%,会跳转到用户目录,在该目录下,如果没有wsl配置文件,则创建一个.wslconfig,文件类型应为WSLCONFIG,而不是文档类型 我是用vscode来创建的,进入到.wslco…

Spring Boot定时任务原理

Spring Boot定时任务原理 在现代应用中,定时任务的调度是实现周期性操作的关键机制。Spring Boot 提供了强大的定时任务支持,通过注解驱动的方式,开发者可以轻松地为方法添加定时任务功能。本文将深入探讨 Spring Boot 中定时任务的实现原理…

将产品照片(form.productPhotos)转为 JSON 字符串发送给后端

文章目录 1. 前端 form.productPhotos 的当前处理a. 组件绑定b. 当前发送逻辑 2. 如何将 form.productPhotos 转为 JSON 字符串发送给后端a. 修改前端 save() 方法b. 确保 esave API 支持接收字符串 基于你提供的 identify-form.vue 代码,我将分析如何将产品照片&a…

模块化设计的力量:从「乐高积木」看组合式开发如何降低软件工程风险

引言:当汽车工厂开始制造积木 想象一家汽车工厂,如果每生产一辆新车都需要重新设计螺丝、焊接发动机、调试轮胎,生产效率将极其低下。但现实中,所有车企都采用「模块化生产」——发动机、变速箱、底盘等核心部件独立开发&#xf…