【树-简单】94. 二叉树的中序遍历

LeetCode94二叉树的中序遍历 算法特点及适用场景特点利用递归方式实现的二叉树中序遍历算法,代码结构简洁明了,非常符合二叉树这种具有递归结构的数据结构的特点,易于理解和实现。它严格按照中序遍历的规则,能够准确地获取二叉树节点值的中序遍历序列。时间复杂度为 ,在遍历二叉树节点获取中序遍历结果方面具有较好的效率表现,只要二叉树的节点数量在可接受范围内,都能快速地完成遍历操作。适用场景。 阅读详情

【题目】
给定一个二叉树的根节点 root ,返回它的 中序 遍历。
【示例 1】
输入:root = [1,null,2,3]
输出:[1,3,2]
【示例 2】
输入:root = []
输出:[]
【示例 3】
输入:root = [1]
输出:[1]
【示例 4】
输入:root = [1,2]
输出:[2,1]
【示例 5】
输入:root = [1,null,2]
输出:[1,2]
【提示】

树中节点数目在范围 [0, 100] 内
-100 <= Node.val <= 100

进阶: 递归算法很简单,你可以通过迭代算法完成吗?
【代码】
【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 visit(self,root):
        if not root:
            return
        self.visit(root.left)
        self.ans.append(root.val)
        self.visit(root.right)
    def inorderTraversal(self, root: TreeNode) -> List[int]:
        self.ans=[]
        self.visit(root)
        return self.ans

【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: TreeNode) -> List[int]:
        ans=[]
        if not root:
            return ans
        stack=[]
        node=root
        while stack or node:
            while node:
                stack.append(node)
                node=node.left
            node=stack.pop()
            ans.append(node.val)
            node=node.right
        return ans

【Morris 中序遍历】能将非递归的中序遍历空间复杂度降为 O(1)
步骤:
假设当前遍历到的节点为 x

  1. 如果 x无左孩子,先将 x 的值加入答案数组,再访问 x 的右孩子,即 x=x.right
  2. 如果 x 有左孩子,则找到 x 左子树上最右的节点(即左子树中序遍历的最后一个节点,x在中序遍历中的前驱节点),我们记为 predecessor。根据 predecessor 的右孩子是否为空,进行如下操作。
    2.1 如果 predecessor的右孩子为空,则将其右孩子指向 x,然后访问 x 的左孩子,即 x=x.left
    2.2如果 predecessor的右孩子不为空,则此时其右孩子指向 x,说明我们已经遍历完 x 的左子树,我们将 predecessor 的右孩子置空,将 x的值加入答案数组,然后访问 x的右孩子,即 x=x.right
  3. 重复上述操作,直至访问完整棵树。

在这里插入图片描述

# 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: TreeNode) -> List[int]:
        res=[]
        while root:
            if root.left:
                # predecessor 节点就是当前 root 节点向左走一步,然后一直向右走至无法走为止
                predecessor = root.left
                while predecessor.right != None and predecessor.right != root:
                    predecessor = predecessor.right
                # 让 predecessor 的右指针指向 root,继续遍历左子树
                if predecessor.right is None:
                    predecessor.right = root
                    root = root.left
                # 说明左子树已经访问完了,我们需要断开链接
                else:
                    res.append(root.val)
                    predecessor.right = None
                    root = root.right
            # 如果没有左孩子,则直接访问右孩子
            else:
                res.append(root.val)
                root = root.right
        return res
Leetcode——94,二叉树中序遍历 /** * \* Created: liuhuichao * \* Date: 2019/7/16 * \* Time: 31:57 PM * \* Description:二叉树的中序遍历 : 中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树 * \ * 给定一个二叉树,返回它的中序 遍历。 * <p> * 示例: * <p> * 输入... 阅读详情

相关推荐

conda环境的复制、备份操作

请确保将 source_env 替换为你要复制的现有环境的名称,并将 target_env 替换为你要创建的新环境的名称。要备份一个Conda虚拟环境,你需要将环境的配置信息和依赖包列表保存起来,以便在需要的时候能够重新创建相同的环境。要将现有的 conda 环境复制为其他环境,可以使用 conda create 命令并克隆已存在的环境。

Dollhan的博客 3774

二叉树的前序、中序、后序遍历

有关二叉树的前序、中序、后序遍历二叉树的详细解析和代码实现

aaa114514aaaa的博客 1521

ZYNQ开发(2)在Linux系统层上PL-PS通过AXI-DMA传输数据详细步骤及注意事项

参考的网络资料 https://github.com/bperez77/xilinx_axidma/tree/master https://gitlab.gnome.org/HosseinBeheshti/UlteraZed7EV/-/tree/master/petalinux/xilinx_axidma https://www.icode9.com/content-3-925319.html https://blog.csdn.net/weixin_38218267/article/details/1

aizaiyueye的专栏 3449

数据结构----二叉树中序遍历

中序遍历 中序遍历左子树,再访问根节点,再中序遍历右子树 中序遍历例子一 中序遍历顺序:BDCEA LFNQM 中序遍历例子二 中序遍历顺序:BDCA MQELN

wgl307293845的博客 1752

ADSP-21565的SigmaStudio图形化编程实战:从FW工程改造到音频通道打通

本文详细介绍了如何将ADSP-21569的SigmaStudio图形化编程固件工程改造,以适配ADSP-21565的纯片内SRAM内存架构。通过修改内存映射和链接文件,打通了音频输出通道,并成功利用SigmaStudio进行图形化编程,实现了从白噪声生成到音频输出的完整验证流程。

weixin_29169505的博客 381

操作系统头歌 课后作业3.3.2:进程的调度

请问:从 6 号进程刚创建完 7 号进程开始,在接下来的 9 次进程调度中,每次调度时,6 号和 7 号进程的剩余时间片是多少?请问:从 6 号进程刚创建完 7 号进程开始,在接下来的 9 次进程调度中,每次调度时,6 号和 7 号进程的剩余时间片是多少?根据相关知识回答当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串。当程序 01.c 运行时(在版本 0 内核中),会在父子两个进程(假设分别为 6 号和 7 号进程)中分别输出字符串。

weixin_73255571的博客 4739

LeetCode 129. 求根节点到叶节点数字之和【c++/java详细题解】

目录1、题目2、思路3、c++代码4、java代码 1、题目 给你一个二叉树的根节点 root,树中每个节点都存放有一个 0 到 9 之间的数字。 每条从根节点到叶节点的路径都代表一个数字: 例如,从根节点到叶节点的路径 1 -> 2 -> 3 表示数字 123 。 计算从根节点到叶节点生成的 所有数字之和 。 叶节点 是指没有子节点的节点。 示例 1: 输入:root = [1,2,3] 输出:25 解释: 从根到叶子节点路径 1->2 代表数字 12 从根到叶子节点路径 1-&g

林深不见鹿 的博客 2429

360可视门铃双摄版数据恢复实战:BIN文件解析与视频重组

本文详细解析了360可视门铃双摄版BIN文件的数据恢复过程,包括文件结构分析、双摄像头数据存储机制及视频重组技术。通过Python开发环境和FFmpeg工具链,成功实现了H.265视频流的解析与重组,为智能家居设备数据恢复提供了实用解决方案。

weixin_29196891的博客 916

【JAVA】LeetCode力扣 第199场周赛 题解+代码

目录一、5472. 重新排列字符串 Easy方法:暴力二、5473. 灯泡开关 IV Medium方法:从左往右,只要和flag不一致,就翻转三、5474. 好叶子节点对的数量 Medium方法:dfs四、5462. 压缩字符串 II Hard方法:不会做,晚上补 一、5472. 重新排列字符串 Easy 通过的用户数3797 尝试过的用户数3843 用户总通过次数3856 用户总提交次数4641 题目难度Easy 给你一个字符串 s 和一个 长度相同 的整数数组 indices 。 请你重新排列字符串

子浩的博客 6013

硬件工程师笔记——三极管Multisim电路仿真实验汇总

NPN型三极管:由N型半导体、P型半导体和N型半导体组成,即NPN结构。 PNP型三极管:由P型半导体、N型半导体和P型半导体组成,即PNP结构。 三极管的工作原理基于电流的控制和放大,其核心是基区对电流的控制作用。 将三极管等效为两个串联的二极管进行等效分析

XU157303764的博客 2637

《UDS协议从入门到精通》系列——到底什么是DTC?

到底什么是DTC?看这里,深度图解DTC格式,详述DTC状态位、快照信息和扩展信息!!

车载系统攻城狮 1万+

中序遍历二叉树示例

#include &lt;stdio.h&gt; int main(){ // int a[5][4]={{1,1,2},{2,-1,-1},{3,-1,-1}}; // int a[5][4]={{1,1,2},{2,3,4},{3,-1,-1},{4,-1,-1},{5,-1,-1}}; int a[5][4]={{1,1,2},{2,3,-1},{...

qq275860560的专栏 1094

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

2024年12月中国电子学会青少年软件编程(Python)等级考试试卷(五级)答案 + 解析

伶俐角少儿编程 487

代码随想录算法训练营第13天| Leetcode94. 二叉树的中序遍历 Leetcode102. 二叉树的层序遍历

还是面向实习来刷算法题,迭代法就没必要探究了,不懂为啥要搞明白迭代法,递归法又简单,而且和迭代法一样。真遇到一定用递归法的题再回来看吧今天这两题没话说,模板,要背熟,在理解的基础上”背“,因为这是树的题的基座,必须要把这个没错误很快写出来,才能提升做二叉树的题的效率。

weixin_45393583的博客 339

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

二叉树的中序遍历-94-[简单]

每日一练,突破自我,梦想无惧算法!

泰山与水 245

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

94. 二叉树的中序遍历

题目: 94. 二叉树的中序遍历 题解: 1. 递归中序遍历 第一种解决方法是使用递归。这是经典的方法,直截了当。我们可以定义一个辅助函数来实现递归。 2. 迭代中序遍历 考查到当前节点时,并不直接输出该节点。 而是当考查节点为空时,从栈中弹出的时候再进行输出(永远先考虑左子树,直到左子树为空才访问根节点)。 代码: 1. 递归法: // 解法一:递归 public static......

dev_zyx的博客 6343

LeetCode第94题_二叉树的中序遍历

给定一个二叉树的根节点root,返回它的遍历。

qq_40263592的博客 1307

力扣94题:二叉树的中序遍历

方法时间复杂度空间复杂度特点递归OnO(n)OnOhO(h)Oh简单易实现,但依赖递归栈。迭代(栈)OnO(n)OnOhO(h)Oh显式使用栈,适合较大的二叉树。Morris 遍历OnO(n)OnO1O(1)O1无额外空间需求,但实现较复杂。不同方法适合不同场景,推荐优先使用递归和迭代方法,Morris 遍历适合对空间要求极高的情况。

weixin_48941116的博客 1097

力扣题解-94. 二叉树的中序遍历

题目:94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 深度优先遍历,遍历原则为:从树的根节点开始,沿着左子树进行深度遍历,直到到达叶子节点为止;然后回溯到根节点,进行右子树的深度遍历,直到遍历完所有节点。 具体的,按照根节点相对于子节点的访问顺序,可进一步分为前序遍历、中序遍历和后序遍历。

lpp 5713

【LeetCode】94. 二叉树的中序遍历

二叉树的中序遍历要求按照左子树-根节点-右子树的顺序访问节点,输出节点值序列。题目给出了四种实现方法:递归法(最简单直观)、迭代法(显式栈模拟递归)、颜色标记法(统一遍历模板)和Morris遍历法(O(1)空间复杂度)。其中递归法代码最简洁,时间复杂度均为O(n),空间复杂度递归和显式栈为O(h)(树高),Morris遍历最优为O(1)。关键点包括处理空树、单节点等边界情况,Morris遍历需注意维护线索指针。

qq_32019341的博客 1031

详细图解二叉树中序遍历(非递归C++)LeetCode94

详细图解二叉树中序遍历(非递归)二叉树中序递归含义LeetCode题目94详细图解源代码运行结果 二叉树中序递归含义 中序遍历首先遍历左子树,然后访问根结点,最后遍历右子树。若二叉树为空则结束返回,否则: (1)中序遍历左子树 (2)访问根结点 (3)中序遍历右子树 如图1所示二叉树,中序遍历结果:DBEAFC LeetCode题目94 给定一个二叉树的根节点 root ,返回它的 中序 遍历。 输入:root = [1,null,2,3] 输出:[1,3,2] 输入:root = [1,2] 输出:

m0_55864612的博客 2875

Leetcode[树] 94. 二叉树的中序遍历

Leetcode[树] 94. 二叉树的中序遍历审题代码实现反思 审题 给定一个二叉树的根节点 root ,返回它的中序遍历。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 示例 4: 输入:root = [1,2] 输出:[2,1] 示例 5: 输入:root = [1,null,2] 输出:[1,2] 中序遍历,对于递归算法来说很好想,也很好实现,但是本

weixin_45415929的博客 170

LeetCode94. 二叉树的中序遍历

LeetCode94. 二叉树的中序遍历 给定一个二叉树的根节点root,返回它的中序遍历。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 提示: 树中节点数目在范围[0, 100]内-100 <= Node.val <= 100 树的中序遍历,递归: 1. 若根节点为空,直接返回 2. 若...

u011485472的博客 226

LeetCode 94:二叉树的中序遍历

LeetCode 94:二叉树的中序遍历 题目描述解题思路代码实现总结 题目描述 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] 解题思路 二叉树的中序遍历:left -->root–>right (左跟右),借助栈结构,我们将每个按顺序遍历的节点,添加到arraylist当中。从二叉树的根节点开始,先将根节点...

香农三定律的博客 174
上一篇: 【树-简单】144. 二叉树的前序遍历(三种方法遍历递归+迭代+Mirrors,需要复习)
下一篇: 【树-简单】145. 二叉树的后序遍历
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值