leetcode94. 二叉树的中序遍历

LeetCode094——二叉树的中序遍历 我的LeetCode代码仓:https://github.com/617076674/LeetCode 原题链接:https://leetcode-cn.com/problems/binary-tree-inorder-traversal/description/ 题目描述: 知识点:二叉树、中序遍历、递归 思路一:递归实现 学过数据结构的人都知道,二叉树天然的具有递归性质,因为二叉... 阅读详情

题目

给定一个二叉树,返回它的中序 遍历。

示例:

输入: [1,null,2,3]
   1
    \
     2
    /
   3

输出: [1,3,2]

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

思路

参考【数据结构】二叉树(前、中、后)序遍历的递归与非递归算法
整体思路:
都借助于栈,第一个入栈的节点均为根节点,不同的是出栈和入栈的时机。
1.对于前序遍历,首先输出根节点,所以每轮只压入根节点,然后先将右子节点入栈,再将左子节点入栈,然后继续出栈,依次迭代到栈为空
2.对于中序遍历,首先输出最左边的子节点,所以先将根节点的左子节点循环入栈,出栈的时候如果有右子节点,再将右子节点入栈,依次迭代到栈为空
3.与2类似,但父节点是最后一个输出来,所以根据父节点找右子树时需要先将父节点保存下来避免陷入死循环,依次迭代到栈为空

实现

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        stack<TreeNode*> temp;
        while (!temp.empty() || root != NULL) {
            //先将左子树入栈
            while (root != NULL) {
                temp.push(root);
                root = root->left;
            }
            root = temp.top();
            //存储根节点
            res.push_back(root->val);
            temp.pop(); 
            if (root->right == NULL) {
                //如果右子树为空,向上查找父节点
                root = NULL;
            } else {
                //如果存在右子树,将右子树入栈
                root = root->right;
            }
        }
        return res;
    }
};
【简单】力扣算法题解析LeetCode94:二叉树的中序遍历 本文介绍了二叉树中序遍历的迭代实现方法。通过使用栈模拟递归过程,算法首先将所有左子节点入栈,然后处理栈顶节点并转向右子树,确保按左-根-右顺序访问节点。Java代码中采用ArrayDeque作为栈结构,时间复杂度O(n),空间复杂度O(h)。该方法避免了递归的潜在栈溢出风险,适合处理深层树结构。文章包含示例说明、核心思路图解和完整可运行的Java代码实现,帮助读者直观理解迭代遍历过程。 阅读详情

相关推荐

Leetcode——94,二叉树中序遍历

/** * \* Created: liuhuichao * \* Date: 2019/7/16 * \* Time: 31:57 PM * \* Description:二叉树的中序遍历 : 中序遍历是先遍历左子树,然后访问根节点,然后遍历右子树 * \ * 给定一个二叉树,返回它的中序 遍历。 * <p> * 示例: * <p> * 输入...

我们的征途是星辰大海 572

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

LeetCode 第94题 二叉树中序遍历两种实现方式

kezade的blog 610

EtherCAT同步模式实战:如何用TwinCAT配置DC-Synchronous模式(附时序图详解)

本文详细解析了如何在TwinCAT环境中配置EtherCAT的DC-Synchronous同步模式,实现纳秒级同步精度。通过硬件准备、参数配置和高级调优步骤,帮助工程师解决工业自动化中的同步挑战,提升运动控制性能。

gold的博客 1571

LeetCode(Python)—— 二叉树的中序遍历(简单)

概述:给定一个二叉树的根节点 root ,返回它的中序遍历 。

m0_61661179的博客 6万+

手把手教你配置UEFI Secure Boot:从密钥生成到系统验证(附避坑指南)

本文详细介绍了如何配置UEFI Secure Boot,从密钥生成到系统验证的全过程,包括PK、KEK等关键密钥的生成方法,以及常见问题的解决方案。通过实战案例和避坑指南,帮助用户有效提升系统启动安全性,防止恶意软件植入。

weixin_30776273的博客 340

【超详细】磁力计数据读取--以IST8310为例

第一章讲了IST8310的特性,I2C通信,最高支持400kHz通信速率,14位或者16位自适应数据输出等特性第二章讲了内部结构第三章讲了电气特性第四章讲了如何联系他们然后数据手册就没了。。。在大疆的开发手册中找到了寄存器的手册,如下:点开I2C配置选项, 下图是配好的:观察IST8310的数据手册,发现其支持最大400kHz的I2C通信速率,也就是快速I2C模式,所以第一行I2C Speed Mode我们选Fast Mode同时不要忘记了在C板中I2C3的两个IO口分别是PA8和PC9(一般来说都是这两个

lmh_12138的博客 1万+

LeetCode:二叉树的中序遍历

给定一个二叉树的根节点 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 解

Bertil的博客 534

squidpy 教程 2:利用 Scanpy 和 Squidpy 进行空间数据的可视化分析

本教程详细介绍了如何利用Squidpy和Scanpy对空间转录组数据进行可视化分析。通过将Scanpy处理得到的聚类结果映射回原始组织图像,并结合基因表达与空间邻域信息,帮助研究者直观揭示细胞类型分布、基因表达模式及空间相互作用,从而深入挖掘空间组学数据的生物学意义。

weixin_29081703的博客 446

LeetCode 二叉树的中序遍历

94.二叉树的中序遍历 数据结构我是学过的,但是我用Java代码还没实现过,于是在做这个题时我看了一个先序遍历的例子,下边总结一下 中序遍历规则是:先遍历左子树,然后遍历中子树,最后遍历右子树。 先序遍历的规则是:先遍历中子树,然后是左子树,最后是右子树。 后序遍历的规则是:先遍历左子树,然后是右子树,最后是中子树。 这里有个记忆的小技巧:就是无论是中序,先序,后序,都是左子树在右子树的...

保持愤怒 976

Python爬虫实战:高效爬取中国版权登记数据

本文将详细介绍如何使用Python最新技术栈构建一个高效、稳定的中国版权登记数据爬虫系统。我们将使用Playwright+Asyncio实现无头浏览器自动化,结合Redis分布式任务队列和MongoDB数据存储,打造一个能够应对反爬机制的企业级数据采集方案。文章包含完整代码实现、性能优化技巧以及法律合规建议,帮助开发者快速掌握大规模数据采集的核心技术。本文详细介绍了2024年使用Python最新技术栈构建中国版权登记数据爬虫的完整方案。基于Playwright的无头浏览器自动化。

2201_76125261的博客 1898

【异常】OpenClaw网关仪表盘 pairing required 报错排查与解决方案

在OpenClaw网关仪表盘页面,完成WebSocket URL、网关令牌等必填项配置后,点击「连接」按钮尝试建立网关连接时,页面下方出现红色报错提示框,核心报错内容为,无法完成网关连接建立,且该报错在令牌配置正确、网络链路通畅的场景下仍会触发。该报错常见于非本地回环地址的访问场景,包括局域网远程访问、公网域名/IP访问、云服务器部署的网关远程管理等场景,本地127.0.0.1回环地址访问通常可正常连接。

奶爸的编程之路,也就一周冷个三天 1077

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

题目描述(中等难度) 二叉树的中序遍历。 解法一 递归 学二叉树的时候,必学的算法。用递归写简洁明了,就不多说了。 public List<Integer> inorderTraversal(TreeNode root) { List<Integer> ans = new ArrayList<>(); getAns(root, ans); ...

wind_liang的博客 947

ardupilot 方向余弦矩阵/旋转矩阵的理解

本节主要记录自己对ardupilot中用到的方向余弦矩阵/旋转矩阵的理解,欢迎批评指正,有些资料参考网上写的比较好的资料,免得查找资料麻烦。旋转矩阵的坐标理解:表示从旋转矩阵的下标的坐标系的坐标变换到上标表示的坐标系坐标下。旋转矩阵的坐标系理解:表示从旋转矩阵的上标的坐标系变换到下标表示的坐标系下。从旋转矩阵的投影更好理解,比如下面旋转矩阵的第一行是左边坐标系的第一维分量在右边坐标系的投影。

陌城烟雨 612

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

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

weixin_48941116的博客 1097

强化学习在视觉导航中的应用

强化学习在视觉导航中的应用​ ,人工智能,计算机视觉,大模型,AI,强化学习(Reinforcement Learning, RL)是一种通过智能体(Agent)与环境进行交互,以最大化累积奖励为目标的机器学习范式。它不依赖于预定义的规则或大量标注数据,而是让智能体在试错过程中学习最优策略。计算机视觉(Computer Vision)则赋予智能体 “观察” 环境的能力,使其能够从图像或视频中提取有用信息。

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 22万+

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

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

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

qq_40263592的博客 1307

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

如果为空了,也就是root是空节点了,说明当前子树的左节点都已经遍历完了,可以开始将左节点值加到res中了,从stack中弹出最近遍历到的节点,将节点值加到res中后让root = root.right。但中序遍历要先存左节点,所以是一直遍历左节点直到左节点为空,然后从栈中弹出上一个节点,这个节点将是当前子树的最左节点,将该节点的值存到res中,然后再令root = root.right。进入 inorder(3),递归调用 inorder(3.left)(即 inorder(None)),返回。

2401_87004385的博客 1545

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

leetcode力扣94. 二叉树的中序遍历

给定一个二叉树,返回它的中序遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] python写中序遍历其实和c++很像 # Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): #...

kaggle expert,全球排名前1000,清华计算机研究生,兴趣算法工程 557

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

思路: 这次使用非递归法来遍历 中序遍历:根左右, ①所以在找到最左边的结点之前,我们一直找的是根左根左根左……直到我们找到最左边的子节点(假设其父节点是p) ②则这个时候应该一层一层的回找相关的右结点,这个时候就把当前结点转到p->right,继续进行①操作,直到找到最右边的结点 具体操作: (假设初始的时候根节点不为空,并申请一个栈Stack,这里用数组来代替,数组下标初始为-1) ①...

Pwnpanda的博客 447

LeetCode94-二叉树的中序遍历

LeetCode94-二叉树的中序遍历 最近全国疫情严重,待在家里没事干,马上又要准备春招了,最近刷刷题,记录一下!再说一句,武汉加油,大家出门记得戴口罩! 1、题目 给定一个二叉树,返回它的中序遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 2、思路 基于递归...

sk18192449347的博客 306

LeetCode 94二叉树的中序遍历

LeetCode 94二叉树的中序遍历 题目简述:给定一个二叉树,返回它的中序遍历。 输入:[1,null,2,3] 输出: [1,3,2] 思路:递归 class Solution { public: vector<int> res; void dfs(TreeNode *root) { if(!root) return; dfs(root->left); res.push_back(root->va

XBlog 237

LeetCode-94. 二叉树的中序遍历

LeetCode-94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 思路 分为递归版本和非递归版本。 递归 /** * Definition for a binary tree node. * public class TreeNode { * ...

Galip的博客 324

《LeetCode力扣练习》第94题 二叉树的中序遍历 Java

《LeetCode力扣练习》第94题 二叉树的中序遍历 Java 一、资源 题目: 给定一个二叉树的根节点 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,

XRT_knives的博客 317

【练习】【二叉树】力扣热题100 94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历。输入:root = [1,null,2,3]输入:root = [1]输入:root = []输出:[1,3,2]

2402_86344613的博客 409

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

给定一个二叉树的根节点。

2401_89122881的博客 369

golang力扣leetcode 94.二叉树的中序遍历

94.二叉树的中序遍历94.二叉树的中序遍历题解代码 94.二叉树的中序遍历 94.二叉树的中序遍历 题解 中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树 思路:递归和迭代 代码 package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func inorderTraversal1(root *TreeNode) []int { if root == nil { return

清风 590
上一篇: leetcode144. 二叉树的前序遍历
下一篇: leetcode114. 二叉树展开为链表
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值