当前位置: 首页 > news >正文

【LeetCode刷题指南】--二叉树的前序遍历,二叉树的中序遍历

🔥个人主页:@草莓熊Lotso

🎬作者简介:C++研发方向学习者

📖个人专栏: 《C语言》 《数据结构与算法》《C语言刷题集》《Leetcode刷题指南》

⭐️人生格言:生活是默默的坚持,毅力是永久的享受。 

前言:在之前的C语言刷题集中我们刷了很多IO类型的基础编程题,但是随着数据结构往后的学习以及企业面试的要求,我们还需要对接口型的题目进行练习,博主在这里准备了新的《LeetCode刷题指南》专栏给大家分享一些我自己在力扣上面写过的题目,提供一些我的解题思路。个人实力有限,欢迎大家补充和指正。


目录

一.二叉树的前序遍历

解题过程: 

代码实现: 

 二.二叉树的中序遍历

解题过程:

代码实现: 


一.二叉树的前序遍历

题目链接:144. 二叉树的前序遍历 - 力扣(LeetCode)

题目描述: 

 题目示例:

思路: 前序遍历,动态开辟数组

解题过程: 

1. returnsize表示要返回的数组的大小,我们这里需要动态开辟数组所申请的空间也是 returnsize*sizeof(int), 这个我们需要实现一个TreeSize函数来解决(结点个数=根节点+左子树节点个数+右子树节点个数)

2.注意我们代码里面传的i需要传地址,这里其实就是把我们之前实现的前序遍历的函数参数改了一下,然后在函数里的打印换成了用数组存储

3.最后都结束了之后,直接返回ans就可以了

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现: 

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
typedef struct TreeNode TreeNode;
void PrevOrder(TreeNode*root,int*ans,int*pi)
{if(root==NULL){return;}ans[(*pi)++]=root->val;PrevOrder(root->left,ans,pi);PrevOrder(root->right,ans,pi);
}
int TreeSize(TreeNode*root)
{if(root==NULL){return 0;}return 1+TreeSize(root->left)+TreeSize(root->right);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize=TreeSize(root);int*ans=(int*)malloc(sizeof(int)*(*returnSize));int i=0;PrevOrder(root,ans,&i);return ans;
}

 二.二叉树的中序遍历

题目链接:94. 二叉树的中序遍历 - 力扣(LeetCode)

题目描述: 

题目示例: 

思路: 中序遍历,动态开辟数组

解题过程:

1. returnsize表示要返回的数组的大小,我们这里需要动态开辟数组所申请的空间也是 returnsize*sizeof(int), 这个我们需要实现一个TreeSize函数来解决(结点个数=根节点+左子树节点个数+右子树节点个数)

2.注意我们代码里面传的i需要传地址,这里其实就是把我们之前实现的中序遍历的函数参数改了一下,然后在函数里的打印换成了用数组存储

3.最后都结束了之后,直接返回ans就可以了

复杂度:

  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

代码实现: 

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/
/*** Note: The returned array must be malloced, assume caller calls free().*/
typedef struct TreeNode TreeNode;
void InOrder(TreeNode*root,int*ans,int*pi)
{if(root==NULL){return;}InOrder(root->left,ans,pi);ans[(*pi)++]=root->val;InOrder(root->right,ans,pi);
}int TreeSize(TreeNode*root)
{if(root==NULL){return 0;}return 1+TreeSize(root->left)+TreeSize(root->right);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize) {*returnSize=TreeSize(root);int*ans=(int*)malloc(sizeof(int)*(*returnSize));int i=0;InOrder(root,ans,&i);return ans;
}

往期回顾:

【LeetCode刷题指南】--随机链表的复制

【LeetCode刷题指南】--有效的括号

【LeetCode刷题指南】--队列实现栈,栈实现队列

【LeetCode刷题指南】--单值二叉树,相同的树

结语:本篇文章就到此结束了,《LetetCode刷题指南》中的题目比起之间的C语言刷题集中的题目,肯定会更加复杂一些。而且题目形式也不一样,大家需要注意一下。如果文章对你有帮助的话,欢迎评论,点赞,收藏加关注,感谢大家的支持。

http://www.dtcms.com/a/311805.html

相关文章:

  • MCP Agent 工程框架Dify初探
  • pytorch简单理解
  • 我的世界之战争星球 暮色苍茫篇 第二十六章、身世
  • 分布在内侧内嗅皮层的层Ⅱ或层Ⅲ的头部方向细胞(head direction cells)对NLP中的深层语义分析的积极影响和启示
  • JVM中年轻代、老年代、永久代(或元空间)、Eden区和Survivor区概念介绍
  • Mysql insert 语句
  • 入门MicroPython+ESP32:开启科技新旅程
  • 机试备考笔记 2/31
  • FastAPI--一个快速的 Python Web
  • C++ 自定义简单的异步日志类
  • oect刷入arm系统安装docker
  • Python深度学习:从入门到精通
  • retro-go 1.45 编译及显示中文
  • 联合索引全解析:一棵树,撑起查询的半边天
  • 【01】OpenCV C#——C#开发环境OpenCvSharp 环境配置 工程搭建 及代码测试
  • 【QT】Qt信号与槽机制详解信号和槽的本质自定义信号和槽带参数的信号和槽
  • 计算机网络:为什么IPv6没有选择使用点分十进制
  • 数据结构初学习、单向链表
  • Python 字典为什么查询高效
  • 数据结构---概念、数据与数据之间的关系(逻辑结构、物理结构)、基本功能、数据结构内容、单向链表(该奶奶、对象、应用)
  • SpringBoot3.x入门到精通系列:2.2 依赖注入与IoC容器
  • Spring AI MCP 服务端
  • 边缘智能网关在水务行业中的应用—龙兴物联
  • 沿街晾晒识别准确率↑32%:陌讯多模态融合算法实战解析
  • P2415 集合求和
  • Docker 镜像打包为 ZIP 文件便于分享和转发
  • linux ext4缩容home,扩容根目录
  • 【Kubernetes】Secret配置管理,安全管理敏感配置
  • Effective C++ 条款17:以独立语句将newed对象置入智能指针
  • Python 程序设计讲义(50):Python 的可迭代对象与迭代器