二叉树的前、中、后序遍历(递归法、迭代法)leetcode144/94/145

leetcode144、二叉树的前序遍历

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
在这里插入图片描述
输入:root = [1,null,2,3]
输出:[1,2,3]

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

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

示例 4:
在这里插入图片描述
输入:root = [1,2]
输出:[1,2]

示例 5:
在这里插入图片描述

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

递归法

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

迭代法

先将根节点加入数组,然后将根节点的右孩子入栈,再将左孩子入栈。出栈时左孩子先出栈,数组输出顺序为根左右。

int* preorderTraversal(struct TreeNode* root, int* returnSize) {struct TreeNode** stack=malloc(sizeof(struct TreeNode*)*1000);int stackSize=0;int *res=(int*)malloc(sizeof(int)*1000);int resSize=0;if(root==NULL){*returnSize=0;return res;}stack[stackSize++]=root;while(stackSize>0){struct TreeNode* node=stack[--stackSize];res[resSize++]=node->val;if(node->right!=NULL)stack[stackSize++]=node->right;if(node->left!=NULL)stack[stackSize++]=node->left; }*returnSize=resSize;return res;}

leetcode145、二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
在这里插入图片描述
输入:root = [1,null,2,3]
输出:[3,2,1]

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

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

递归法

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

迭代法

前序遍历顺序调换:根右左->根左右
先将根节点加入数组,然后将根节点的左孩子入栈,再将右孩子入栈。出栈时右孩子先出栈,加入数组顺序为根右左。
将数组逆序输出:左右根

int* postorderTraversal(struct TreeNode* root, int* returnSize) {struct TreeNode** stack=malloc(sizeof(struct TreeNode*)*1000);int stackSize=0;int *res=(int*)malloc(sizeof(int)*1000);int resSize=0;if(root==NULL){*returnSize=0;return res;}stack[stackSize++]=root;while(stackSize>0){struct TreeNode* node=stack[--stackSize];res[resSize++]=node->val;if(node->left!=NULL)stack[stackSize++]=node->left; if(node->right!=NULL)stack[stackSize++]=node->right;}//将数组逆序for(int i=0,j=resSize-1;i<=j;i++,j--){int tmp=res[i];res[i]=res[j];res[j]=tmp;}*returnSize=resSize;return res;
}

leetcode94、二叉树的中序遍历

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

示例 1:
在这里插入图片描述

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

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

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

递归法

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

迭代法

用一个指针来记录当前访问节点,先访问左子树,直到遍历到左子树的最左叶节点,输出该节点。输出该叶节点的父节点。然后访问该父节点的右子树,访问完右子树后输入该右节点。

int* inorderTraversal(struct TreeNode* root, int* returnSize) {struct TreeNode** stack = malloc(sizeof(struct TreeNode*) * 1024); // 假设栈的最大大小为 1024int stackSize = 0;int* result = malloc(sizeof(int) * 1024); // 假设结果数组的最大大小为 1024int resultSize = 0;struct TreeNode* cur = root;//借用指针的遍历来帮助访问节点while(cur!=NULL||stackSize>0){if(cur!=NULL){stack[stackSize++]=cur;cur=cur->left;}else{cur=stack[--stackSize];result[resultSize++]=cur->val;cur=cur->right;}}*returnSize = resultSize;return result;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1483836.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙开发入门——ArkTS语法简介(万字简介)

ArkTS 作为鸿蒙开发的编程语言&#xff0c;我们先来一图看看这个语言&#xff0c;我们可以看到ArkTS是在TS&#xff08;TypeScript&#xff09;的基础上改造的&#xff0c;而TS又是在JS&#xff08;JavaSript&#xff09;上改造的&#xff0c;一句话总结就是ArkTS是TS的超集&a…

新版本 idea 创建不了 spring boot 2 【没有jkd8选项】

创建新项目 将地址换成如下 https://start.aliyun.com/

HackQuest介绍 web3 学习平台

HackQuest 官网地址&#xff1a; https://www.hackquest.io/zh HackQuest是一个专注于Web3技术教育的在线学习平台&#xff0c;旨在帮助全球开发者掌握区块链、加密货币和去中心化应用&#xff08;DApps&#xff09;领域的最新技能。该平台汇聚了超过14000名活跃开发者&#…

C学习(数据结构)-->单链表习题

目录 一、环形链表 题一&#xff1a;环形链表 思路&#xff1a; 思考一&#xff1a;为什么&#xff1f; 思考二&#xff1a;快指针一次走3步、4步、......n步&#xff0c;能否相遇 step1&#xff1a; step2&#xff1a; 代码&#xff1a; 题二&#xff1a; 环形链表 I…

区块链技术在溯源领域的应用

区块链技术具有去中心化、不可篡改、可追溯等特点&#xff0c;使其在溯源领域具有广阔的应用前景。具体而言&#xff0c;区块链技术可以应用于以下几个方面。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 产品溯源 产品溯源是指…

Nginx的核心功能

1. Nginx的核心功能 1.1 nginx反向代理功能 正向代理 代理的为客户端&#xff0c;对于服务器不知道真实客户的信息。例如&#xff1a;翻墙软件 反向代理服务器 代理的为服务器端。对于客户来说不知道服务器的信息。例如&#xff1a;nginx 项目部署图 web项目部署的虚拟机和Ng…

【linux】服务器安装NVIDIA驱动

【linux】服务器安装NVIDIA驱动 【创作不易&#xff0c;求点赞关注收藏】&#x1f600; 文章目录 【linux】服务器安装NVIDIA驱动一、关闭系统自带驱动nouveau二、下载英伟达驱动三、安装英伟达驱动1、禁用X服务器和相关进程2、在TTY终端安装驱动3、验证是否安装成功4、重新启…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…

Spring循环依赖与三级缓存

Spring循环依赖是指两个或多个Bean相互依赖&#xff0c;导致Spring无法在不部分实例化这些Bean的情况下完成它们的创建。在Spring框架中&#xff0c;为了解决循环依赖问题&#xff0c;Spring使用了三级缓存机制。 假设BeanA依赖BeanB&#xff0c;BeanB依赖BeanA&#xff0c;Spr…

Nginx详解(超级详细)

目录 Nginx简介 1. 为什么使用Nginx 2. 安装Nginx Nginx的核心功能 1. Nginx反向代理功能 2. Nginx的负载均衡 3 Nginx动静分离 Nginx简介 Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件&#xff08;IMAP/POP3&#xff09;代理服务器&#xff0c;在BSD-like 协…

2-35 基于matlab的四足液压机器人设计程序

基于matlab的四足液压机器人设计程序&#xff0c;界面化例程&#xff0c;输入液压机器人结构参数&#xff0c;输出液压缸的行程、推力和速度。程序已调通&#xff0c;可直接运行。 2-35 四足液压机器人 液压机器人结构参数 - 小红书 (xiaohongshu.com)

Postman、Apifox、Apipost用哪个?

Postman、Apifox、Apipost都是流行的API接口管理工具&#xff0c;它们各自具有不同的特点和优势&#xff0c;因此哪个更好用取决于具体的使用场景和需求。以下是对这三个工具的比较分析&#xff1a; 一、Postman 特点与优势&#xff1a; 支持多种请求方式&#xff1a;包括GE…

基于Python+Django+MySQL的心理咨询预约系统

心理咨询预约系统 DjangoMySQL 基于PythonDjangoMySQL的心理咨询预约系统 项目主要依赖Django3.2&#xff0c;MySQL 支持随机验证码生成与登录验证 简介 基于PythonDjangoMySQL的心理咨询预约系统通过连接数据库获取数据&#xff0c;登录新增随机数字验证码验证。具体可以看…

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在&#xff0c;我们进一步推出了VisualRules-Web在线版本&#xff0c;让您无需安装任何软件&#xff0c;即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策&#xff0c;VisualRules-W…

GESP CCF C++ 四级认证真题 2024年6月

第 1 题 下列代码中&#xff0c;输出结果是&#xff08; &#xff09; A. 12 24 24 12 B. 24 12 12 24 C. 12 12 24 24 D. 24 24 12 12 第 2 题 下面函数不能正常执行的是&#xff08;&#xff09; A. B. C. D. 第 3 题 下面程序…

理解UI设计:UI设计师的未来发展机遇

UI设计师的出现是互联网时代的设计变革。随着移动互联网的快速发展&#xff0c;移动产品设计师非常短缺。高薪资让许多其他行业的设计师已经转向了UI设计。那么什么是UI设计呢&#xff1f;UI设计师负责什么&#xff1f;UI设计的发展趋势和就业前景如何&#xff1f;这些都是许多…

JMX 反序列化漏洞

前言 前段时间看到普元 EOS Platform 爆了这个洞&#xff0c;Apache James&#xff0c;Kafka-UI 都爆了这几个洞&#xff0c;所以决定系统来学习一下这个漏洞点。 JMX 基础 JMX 前置知识 JMX&#xff08;Java Management Extensions&#xff0c;即 Java 管理扩展&#xff0…

PyTorch 深度学习实践-加载数据集

视频指路 参考博客笔记 参考笔记二 目录标题 介绍课程代码作业实现 介绍 在深度学习时用min-batch来平衡训练时间和性能上的需求&#xff0c;之后训练周期要写成两层嵌套循环。epoch&#xff1a;所有训练样本进行完一次前向和反向传播&#xff0c;batch-size&#xff1a;训练的…

Yolo-World网络模型结构及原理分析(更新中)

文章目录 概要一、整体架构分析二、详细结构分析1.YOLO检测器1.1 Backbone1.2 Head1.3 各模块的过程和作用Conv卷积模块C2F模块BottleNeck模块SPPF模块Upsampling模块Concat模块 2.文本编码器 Text Encoder 概要 尽管YOLO&#xff08;You Only Look Once&#xff09;系列的对象…

AI(Adobe lliustrator)教程+软件包

简介&#xff1a; 软件主要应用于印刷出版、海报书籍排版、专业插画、多媒体图像处理和互联网页面的制作等&#xff0c;也可以为线稿提供较高的精度和控制&#xff0c;适合生产任何小型设计到大型的复杂项目。 通常用于创建LOGO(商标或徽标)&#xff0c;图标&#xff0c;插图…