力扣题---二叉树前、中、后序遍历

2023-11-18

二叉树前序遍历

我们先来了解题目。

输入:root = [1,null,2,3]
输出:[1,2,3]
示例 2:

输入:root = []
输出:[]
示例 3:

输入:root = [1]
输出:[1]

从示例不难看出,题目给定树的根结点,用前序遍历的方式,把二叉树的值放入数组中(若不知二叉树前、中、后序的顺序是什么,可以看这篇,里面有二叉树的详细解读

数据结构-二叉树-更新完整版    


那么题目要求得知,这里思路则是:

1.首先我们需要一个数组,数组大小多大

2.我们需要去计算树结点,来确定数组大小

3.然后通过前序遍历方式,放入数组中

4.最后返回数组。

int TreeSize(struct TreeNode* root)
{
    return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}

int* PerOrder(struct TreeNode* root,int* a,int* i)
{
    if(root==NULL)
    return;

    a[(*i)++]=root->val;//因为递归栈帧问题 i需要解引用

    PerOrder(root->left,a,i);
    PerOrder(root->right,a,i);

    return a;
}

int* preorderTraversal(struct TreeNode* root, int* returnSize){
 int size=TreeSize(root);//计算数组大小
 int* a=(int*)malloc(sizeof(int)*size);//创建数组
 int i=0;

 *returnSize=size;//返回相应的数组大小

 return PerOrder(root,a,&i);//前序遍历
}

既然前序完成,那么中、后序的问题则迎刃而解,我们只需要调换前序转为中、序即可

中序遍历

int TreeSize(struct TreeNode* root)
{
    return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}

int* InOrder(struct TreeNode* root,int* a,int* i)
{
    if(root==NULL)
    return;

    InOrder(root->left,a,i);
    a[(*i)++]=root->val;//因为递归栈帧问题 i需要解引用
    InOrder(root->right,a,i);

    return a;
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSize(root);
int* a=(int*)malloc(sizeof(int)*size);
int i=0;
*returnSize=size;

return InOrder(root,a,&i);
}

后续遍历

 int TreeSize(struct TreeNode* root)
{
    return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}

int* CurOrder(struct TreeNode* root,int* a,int* i)
{
    if(root==NULL)
    return;

    CurOrder(root->left,a,i);
    CurOrder(root->right,a,i);
    a[(*i)++]=root->val;//因为递归栈帧问题 i需要解引用

    return a;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSize(root);
int* a=(int*)malloc(sizeof(int)*size);
int i=0;
*returnSize=size;

return CurOrder(root,a,&i);
}

如果本篇对你有帮助,希望能获得您的赞!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

力扣题---二叉树前、中、后序遍历 的相关文章

  • 2.4.5 Profile CPU参数

    最后更新2021 07 19 CPU的状态 参数表现出来的是分区的状态和参数 Power 6 7小型机 分区有3种模式 Shared Dedicated Shared dedicated partition Dedicated分区同时选择了
  • 求职笔记-操作系统-动态链接库、静态链接库区别

    dll什么意思 动态链接库 存放的是各类程序的函数实现过程 当程序需要调用函数时 需要先载入DLL 然后取得函数的地址 最后进行调用 使用DLL文件的好处是程序不需要在运行之初加载所有代码 只有在程序需要某个函数的时候才从DLL中取出 还可
  • linux防火墙 ( cent7.*)常用操作:

    cent7 防火墙操作 注意开通或关闭端口后 一定要重启防火墙服务 重装防火墙 不然无法生效 1 查看 系统防火墙是否开启 firewall cmd state 2 开启 关闭 重启访火墙 永久关闭防火墙 必须先临时关闭防火墙 再执行该命令
  • Mac终端如何查找具体文件的详细路径

    find 命令 find iname test Boston CSV csv
  • 毕业设计-基于计算机图像识别的垃圾智能分类系统

    目录 前言 课题背景和意义 实现技术思路 一 YOLOv3 算法 二 基于 Tensorflow2 的 YOLOv3 算法垃圾识别 三 总结 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业
  • win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案

    报错信息 出现问题的原因是微软最近发布的更新补丁 要求服务器端和用户端都更新后才可以连接 最简单粗暴地方式就是卸载自己电脑的更新 而下面的这种方法需要修改注册列表 解决方案 1 WIN R 然后运行 regedit 命令 2 找到路径 HK

随机推荐

  • MySQL——无法打开MySQL8.0软件安装包或者安装过程中失败,如何解决?

    在运行MySQL8 0软件安装包之前 用户需要确保系统中已经安装了 Net Framework相关软件 如果缺少此软件 将不能正常地安装MySQL8 0软件 解决方案 到这个地址 https www microsoft com en us
  • 51 单片机占用 RAM 分析

    51 单片机占用 RAM 分析 简介 很久不用 51 单片机了 再拿起 51 的东西 发现之前学的时候遗漏很多细节 比如 RAM 的占用情况 都哪些会占用 RAM 空间 当时学习的时候从来没有注意过 包括用上 32 位的 MCU 之后也不怎
  • 学习SVG(八)文本

    简介 在SVG中除了绘图外 还可以添加文本 需要使用
  • 直播预告

    点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入 6月9日晚7 30 9 00 AI TIME特别邀请了三位优秀的讲者跟大家共同开启ICLR专场六 哔哩哔哩直播通道 扫码关注AITIME哔哩哔哩官方账号 观看直播 链接 http
  • 前沿探索|关于 AIGC 的「幻觉/梦游」问题

    AI语言模型的梦游是指模型产生内容与真实世界不符或者是毫无意义的情况 这种情况主要是由于语言模型缺乏真实世界的知识和语言的含义 导致模型难以理解和表达现实世界的概念和信息 这种情况在现代自然语言处理中普遍存在 尤其是在开放式生成领域的问题中
  • 分享一个可以下载全球geojson经纬度信息的网址

    https gadm org download country html
  • MySQL数据库语言一、DDL

    作者简介 正在努力的99年打工人 宣言 人生就是B birth 和D death 之间的C choise 做好每一个选择 创作不易 动动小手给个点赞加关注吧 有什么意见评论区告诉我 一起学习 目录 前言 什么是数据库 DDL语句 创建库 创
  • Python获取微信好友地址以及性别并生成可视化图表

    简介 使用python批量获取微信好友地址 需要使用itchat库 这个库是用的网页版微信的接口进行数据获取的 所以你想测试这个功能必须要你的微信能够登录网页版微信 之前的itchat uos模块使用了统信版的接口绕过了腾讯的检测 所有的微
  • Python opencv学习-8寻找轮廓、绘制轮廓

    import numpy as np import cv2 im cv2 imread image canny png 寻找轮廓前要对其进行灰度化 二值化处理 也可使用canny进行边缘检测 imgray cv2 cvtColor im c
  • 大厂真实Java面试题合集附答案(腾讯、阿里、字节跳动、百度、美团)

    这些面试题都是互联网大厂真实流出的面试内容 每个问题都附带完整详细的答案 不像网上的那些资料三教九流有的甚至还没答案 这些面试题我也是经过日积月累才整理出来的精品资料 这些面试题主要是针对1 5年左右的Java开发程序员提升的 不管是传统行
  • 实时音频编解码之五 噪声整形

    本文谢绝任何形式转载 谢谢 1 4 5 噪声整形 因压缩比特率而带来的量化误差会导致规律的噪声产生 即使量化带来的噪声能量上远小于语音信号 但是由于人的听觉系统对规律性的噪声非常敏感 因而非常影响听觉体验 噪声整形的目的是增加量化后解码信号
  • Python报错 AttributeError: ‘NoneType‘ object has no attribute ‘split

    Python报错 AttributeError NoneType object has no attribute split 源程序 raw line None dstID if line n pid ls append ID title
  • typora的images怎么设置相对路径

    我的软件安装在D Typora 分别有D Typora FilesSave和D Typora images 分别用来保存 md文件和用到的图片 首先preferences image启用copy image to custom folder
  • C++设计模式之抽象工厂模式

    之前讲到了C 设计模式 工厂方法模式 我们可能会想到 后期产品会越来越多了 建立的工厂也会越来越多 工厂进行了增长 工厂变的凌乱而难于管理 而且由于工厂方法模式创建的对象都是继承于Product的 所以工厂方法模式中 每个工厂只能创建同一产
  • 太好用了!Linux 服务器上必备的 4 个开源工具

    关注后回复 进群 拉你进程序员交流群 来自 开源最前线 今天和大家分享 4 个可以在 Linux 上运行的开源服务器 1 Samba Samba 是种自由软件 用来让 UNIX 系列的操作系统与微软 Windows 操作系统的 SMB CI
  • 响应式布局之REM

    REM是实现响应式布局的方案之一 除了REM之外 还有VM REM VM 今天主要来记录一下REM的实操 一 安装插件 npm install lib flexible npm install postcss plugin px2rem D
  • 第36章_瑞萨MCU零基础入门系列教程之步进电机控制实验

    本教程基于韦东山百问网出的 DShanMCU RA6M5开发板 进行编写 需要的同学可以在这里获取 https item taobao com item htm id 728461040949 配套资料获取 https renesas do
  • 史上最详细的快速排序算法

    史上最详细的快速排序算法 最近学了快速排序算法 在csdn上找了很多篇博客 虽然代码可以执行正确 但是解释却有点 官方 有很多细节 很多需要注意的地方并没有写到 故此 我写了这篇博客 看了我这篇博客 你绝对会恍然大悟 先给大家看看清楚明了的
  • 谁说不同品牌内存无法兼容-关键调整频率和内存时序

    高手绕道 菜鸟文 当时2018年买了两根光威DDR4 8G 3000的灯条 2019年手欠又买了两根威刚DDR4 8G 3000的黄金马甲条 两组内存条都是京东上买的 当时买完两组之后插上就看看电影 跑跑虚拟机看看网页没发现啥问题 结果过了
  • 力扣题---二叉树前、中、后序遍历

    二叉树前序遍历 我们先来了解题目 输入 root 1 null 2 3 输出 1 2 3 示例 2 输入 root 输出 示例 3 输入 root 1 输出 1 从示例不难看出 题目给定树的根结点 用前序遍历的方式 把二叉树的值放入数组中