【LeetCode算法】第94题:二叉树的中序遍历

ops/2024/10/20 8:52:09/

目录

一、题目描述

二、初次解答

三、官方解法

四、总结


一、题目描述

二、初次解答

1. 思路:二叉树的中序遍历。访问二叉树的左子树,再访问二叉树的根节点,最后访问二叉树的右叉树。

2. 代码:

void order(struct TreeNode* root, int* ret, int* p){if(!root)return;order(root->left, ret, p);ret[(*p)++]=root->val;order(root->right, ret, p);
}int* inorderTraversal(struct TreeNode* root, int* returnSize) {int* ret=(int*)malloc(sizeof(int)*100);*returnSize=0;order(root, ret, returnSize);return ret;
}

3. 优点:实现简单,容易想到,且仅需遍历一遍,时间复杂度为O(n)。

4. 缺点:需要递归栈空间,空间复杂度为O(n)。

三、官方解法

1. 思路:迭代遍历二叉树,手动维护栈。每次迭代访问子节点前,将当前节点地址保存到栈内,访问完左节点后,再访问当前节点,最后访问右节点。

2. 代码:

int* inorderTraversal(struct TreeNode* root, int* returnSize) {int* ret=malloc(sizeof(int)*100);struct TreeNode** tmp=malloc(sizeof(struct TreeNode*)*100);int top=0;*returnSize=0;while(root || top>0){while(root){tmp[top++]=root;root=root->left;}root=tmp[--top];ret[(*returnSize)++]=root->val;root=root->right;}return ret;
}

3. 优点:符合不采用迭代的要求,且时间复杂度为O(n)。

4. 缺点:手动维护栈,空间复杂度依旧为O(n)。

四、总结

当遇到二叉树中序遍历时,使用递归实现最简单,也可以采用迭代手动维护栈空间来实现。


http://www.ppmy.cn/ops/45317.html

相关文章

Clickhouse 计算引擎架构 —— Clickhouse 架构篇(三)

文章目录 前言ClickHouse计算引擎的架构简介与设计思想架构简介设计思想 火山模型向量化引擎向量化引擎的实现方式向量化引擎的前提 计算引擎如何影响查询速度总结 前言 相比较于存储引擎的精妙设计,ClickHouse的计算引擎一直是一个争议非常大的话题。对ClickHouse…

专业的Java工程管理软件源码:详尽的项目模块及其功能点清单

在工程项目管理软件领域,我们致力于提供全过程、全方位的综合管理解决方案。该软件覆盖了建设工程项目管理组织建设、项目策划决策、规划设计、施工建设到竣工交付、总结评估、运维运营的各个环节,确保项目管理的全面性和高效性。 工程项目管理软件包含…

TS中的InstanceType函数和Typeof 操作符

InstanceType函数 简介 instancetype函数&#xff1a;该函数返回&#xff08;构造&#xff09; 由某个构造函数构造出来的实例类型组成的类型。 常见使用 场景一 【vue中的instanceType用法】父组件用ref获取子组件时&#xff0c;通过 instanceType获取子组件的类型 <!-- …

【NumPy】全面解析flatten函数:简化数组变平操作

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

js实现元素根据鼠标滚轮滚动向左右上下滑动着从模糊到清楚显示出来

html代码 <div ref{test} id"animatedElement" className"not-animated"> <div style{{width:"100px",height:"50px",backgroundColor:"red"}}> </div> </div> JS代码 const te…

Java内存空间

Java内存空间划分 Java虚拟机在执行Java程序的过程中会把他管理的内存划分为若干个不同的数据区域&#xff0c;如图所示1.7和1.8两个版本的Java内存空间划分。 JDK1.7: JDK1.8: 线程私有&#xff1a; 程序计数器虚拟机栈本地方法栈 线程共享 &#xff1a; 堆方法区直接内…

[解决]windows mysql8.0.x误删除root,解决办法

1. 停止mysql服务 2. 以管理员身份打开命令窗口&#xff0c;进入到mysql安装位置的bin目录下 3. 输入 mysqld --console --skip-grant-tables --shared-memory 注意&#xff1a;a. 很多解决办法是输入mysqld --skip-grant-tables&#xff0c;这在mysql8.0之后的版本已经不在…

【HarmonyOS尝鲜课】- 下载、安装DevEco Studio以及配置环境、创建运行HarmonyOS项目

下载、安装开发工具 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 这里以Windows为例进行安装&#xff0c;可以根据操作系统选择对应的版本进行下载。 下载完成后解压一下&#xff0c;进入文件里&#xff0c;双击应用程序&#xff0c;打开安装向导&a…