【leetcode】二叉树的前序遍历➕中序遍历➕后序遍历

大家好,我是苏貝,本篇博客带大家刷题,如果你觉得我写的还不错的话,可以给我一个赞👍吗,感谢❤️
在这里插入图片描述


目录

  • 1. 二叉树的前序遍历
  • 2. 二叉树的中序遍历
  • 3. 二叉树的后序遍历

1. 二叉树的前序遍历

点击查看题目

在这里插入图片描述
在这里插入图片描述

根据提示,我们应该先动态开辟一个数组,之后按前序遍历的顺序将二叉树的值插入数组中,最后再返回这个数组。我们再来看函数给定的形参是什么:root是指向二叉树的根节点的指针,*returnsize是数组的大小,而非题目给我们已经开辟好的数组。
首先我们要想开辟数组,那么我们需要知道数组的大小,也就是二叉树的节点总数,用下面这个函数来返回节点总数

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

然后,我们将二叉树的值按前序遍历的顺序放入数组中。那数组的下标如何控制呢?一般可以用全局变量,但是要注意在每次调用下面这个函数时,将i置为0。否则进行第二次调用该函数时,数组的下标是从n(二叉树个数)开始的,而不是从0开始

int i=0;void _preorderTraversal(struct TreeNode* root, int* arr)
{if(root==NULL)return;arr[i++]=root->val;_preorderTraversal(root->left,arr);_preorderTraversal(root->right,arr);
}

基于全局变量的不方便,我们也可以采用下面这种方法,即传一个初始化为0的变量的地址进来。

void _preorderTraversal(struct TreeNode* root, int* arr,int* pi)
{if(root==NULL)return;arr[(*pi)++]=root->val;_preorderTraversal(root->left,arr,pi);_preorderTraversal(root->right,arr,pi);
}

好的,我们来看最终代码

int TreeSize(struct TreeNode* root)
{if(root==NULL)return 0;return 1+TreeSize(root->left)+TreeSize(root->right);// return root==NULL?0://     1+TreeSize(root->left)+TreeSize(root->right);
}void _preorderTraversal(struct TreeNode* root, int* arr,int* pi)
{if(root==NULL)return;arr[(*pi)++]=root->val;_preorderTraversal(root->left,arr,pi);_preorderTraversal(root->right,arr,pi);
}int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n=TreeSize(root);*returnSize=n;int* arr=(int*)malloc(sizeof(int)*n);int i=0;_preorderTraversal(root,arr,&i);return arr;
}

2. 二叉树的中序遍历

点击查看题目
在这里插入图片描述
在这里插入图片描述

二叉树的中序遍历和下面的后序遍历思路同上,下面就只展示代码不做解释了

int TreeSize(struct TreeNode* root)
{return root==NULL?0:1+TreeSize(root->left)+TreeSize(root->right);
}void _inorderTraversal(struct TreeNode* root,int* arr,int* pi)
{if(root==NULL)return;_inorderTraversal(root->left,arr,pi);arr[(*pi)++]=root->val;_inorderTraversal(root->right,arr,pi);
}int* inorderTraversal(struct TreeNode* root, int* returnSize) {int n=TreeSize(root);*returnSize=n;int* arr=(int*)malloc(sizeof(int)*n);int i=0;_inorderTraversal(root,arr,&i);return arr;
}

3. 二叉树的后序遍历

点击查看题目
在这里插入图片描述
在这里插入图片描述

int TreeSize(struct TreeNode* root)
{return root==NULL?0:1+TreeSize(root->left)+TreeSize(root->right);
}void _postorderTraversal(struct TreeNode* root,int* arr,int* pi)
{if(root==NULL)return;_postorderTraversal(root->left,arr,pi);_postorderTraversal(root->right,arr,pi);arr[(*pi)++]=root->val;
}int* postorderTraversal(struct TreeNode* root, int* returnSize) {int n=TreeSize(root);*returnSize=n;int* arr=(int*)malloc(sizeof(int)*n);int i=0;_postorderTraversal(root,arr,&i);return arr;
}

好了,那么本篇博客就到此结束了,如果你觉得本篇博客对你有些帮助,可以给个大大的赞👍吗,感谢看到这里,我们下篇博客见❤️

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT终于有身体了

目录 一、开启 AI 机器人新纪元:Figure 01 的惊艳亮相 二、网友热议与技术探索:Figure 01 的广泛影响 三、未来展望:人形机器人与日常生活的融合 一、开启 AI 机器人新纪元:Figure 01 的惊艳亮相 在人工智…

18 OpenCV霍夫变换检测直线

文章目录 HoughLines 算子HoughLinesP 算子示例 HoughLines 算子 cv::HoughLines( InputArray src, // 输入图像,必须8-bit的灰度图像 OutputArray lines, // 输出的极坐标来表示直线 double rho, // 生成极坐标时候的像素扫描步长 double theta, //生成极坐标时候…

【阿里云系列】-部署ACK集群的POD应用日志如何集成到日志服务(SLS)中

介绍 我们在实际部署应用到阿里云的ACK集群后,由于后期应用服务的持续维护诉求可能需要跟踪排查问题,此时就要具备将应用的历史日志存档便于后期排查问题 处理方式 为了解决以上的普遍需求,需要将ACK中的应用日志采集到SLS的Logstore中,然…

使用CIP采集欧姆龙EtherNet/IP从入门到精通

本文将会从以下几个方面介绍 1.CIP是什么 2.EtherNet/IP通信是什么 3.CIP通信报文解析 4.使用CIP常用的方法和功能介绍(UCMM) 5.自己封装了一个类,只要知道标签名称,和数据类型即可读写数据 6.demo展示 1.CIP是什么 CIP通信…

CSS:过渡动画 (Transition)与关键帧动画(Keyfram)

一、过渡动画 (Transition) 1.简单介绍 Transition能为样式的变化提供过渡效果,例如在下面的代码中: .main {width: 300px;height: 100px;background-color: #d26f6f;}.main:hover {width: 300px;height: 200px;background-color: #5e3e3e;transition:…

关于如何重燃学习的激情

3月1日是我回学校的第一天。经历了长达8个月在家的昏暗时刻,我这10天的感觉和在家的感觉发生了翻天覆地的变化,最明显的莫过于学习状态的改变。 倒不是说在家学的不好,而是说在学校,我对学习的整体感觉,以及专注程度&…

警惕Memcached协议滥用!网络攻击愈演愈烈,如何做好服务器防御?

近期,网络安全领域迎来了一场新的挑战。Memcached协议,这个原本用于提升数据库读取性能的开源内存缓存系统,近期被恶意攻击者所滥用,进行大规模分布式拒绝服务(DDoS)放大攻击。全球多家公司服务器受到波及&…

2024年腾讯云优惠券领取入口整理汇总

腾讯云作为国内领先的云服务提供商,一直以其稳定、高效、安全的服务赢得了广大用户的信赖。为了回馈广大用户,腾讯云经常会推出各种优惠活动,其中优惠券就是最为常见和受欢迎的一种。 一、腾讯云优惠券领取入口 渠道一:腾讯云官网…

【云呐】固定资产管理系统处理哪些业务

固定资产管理是企业经营全过程中非常重要的任务。涉及到公司的核心资产,包括土地、建筑、设备、车辆等。许多企业选择固定资产管理系统,以确保这些资产的高效管理和合理使用。所以,固定资产管理系统解决了哪些业务?步骤是什么&…

资深老鸟,自动化测试分层模型与落地总结,“我“该如何提升?

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、自动化测试的分…

可视化场景(4):财务场景,公司经营的晴雨表。

在财务场景中,可视化大屏具有以下8个应用价值: 销售和收入分析 可视化大屏可以展示销售额、收入来源、销售渠道等数据,帮助财务团队分析销售趋势和收入结构,发现潜在的增长机会和问题。 成本和费用管理 可视化大屏可以显示成本…

超越文本:对话式人工智能如何理解上下文

智能对话助手,让沟通无障碍 在当今的数字时代,对话式人工智能已经成为我们日常互动中不可或缺的一部分,从客户服务机器人到 Siri 和 Google Assistant 等个人助理。 这些系统从简单的基于文本的响应到理解上下文的演变是人工智能的重大飞跃。…