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

【代码随想录day 12】 力扣 144.145.94.前序遍历中序遍历后序遍历

视频讲解:https://www.bilibili.com/video/BV1Wh411S7xt/?vd_source=a935eaede74a204ec74fd041b917810c
文档讲解:https://programmercarl.com/%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E9%80%92%E5%BD%92%E9%81%8D%E5%8E%86.html#%E5%85%B6%E4%BB%96%E8%AF%AD%E8%A8%80%E7%89%88%E6%9C%AC
力扣题目:https://leetcode.cn/problems/binary-tree-preorder-traversal/
https://leetcode.cn/problems/binary-tree-inorder-traversal/
https://leetcode.cn/problems/binary-tree-postorder-traversal/

其实遍历就像卡哥讲的一样,分为3部分:

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。

  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。

  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

拿这三道题举例,首先我要输入根节点,输出遍历数组和返回长度
其次是判断如果输入的根节点为空,我就结束遍历
最后是我需要先遍历左子树,在赋值,再遍历右子树。(中序遍历)。确定好顺序即可
前序遍历:中左右
中序遍历:左中右
后序遍历:左右中

//前序遍历:
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;
}//中序遍历:
void inOrder(struct TreeNode* node, int* ret, int* returnSize) {if(!node)return;inOrder(node->left, ret, returnSize);ret[(*returnSize)++] = node->val;inOrder(node->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;
}//后序遍历:
void postOrder(struct TreeNode* node, int* ret, int* returnSize) {if(node == NULL) return;postOrder(node->left, ret, returnSize);postOrder(node->right, ret, returnSize);ret[(*returnSize)++] = node->val;
}int* postorderTraversal(struct TreeNode* root, int* returnSize){int* ret= (int*)malloc(sizeof(int) * 100);*returnSize = 0;postOrder(root, ret, returnSize);return ret;
}
http://www.dtcms.com/a/317952.html

相关文章:

  • 【数据可视化-82】中国城市幸福指数可视化分析:Python + PyEcharts 打造炫酷城市幸福指数可视化大屏
  • 架构层防护在高并发场景下的实践
  • Linux系统之Docker命令与镜像、容器管理
  • Spring Cloud系列—Eureka服务注册/发现
  • ElasticSearch~DSL常用语法
  • Unity 调节 Rigidbody2D 响应速度的解决方案【资料】
  • CS课程项目设计8:基于Canvas支持AI人机对战的五子棋游戏
  • Lesson 35 Stop thief!
  • MATLAB实现的改进遗传算法用于有约束优化问题
  • Java 工具类的“活化石”:Apache Commons 核心用法、性能陷阱与现代替代方案
  • 03-mysql/redis/apache安装记录
  • 从《中国开源年度报告》看中国开源力量的十年变迁中,Apache SeaTunnel 的跃迁
  • SmartMediaKit 模块化音视频框架实战指南:场景链路 + 能力矩阵全解析
  • LinkedList 深度解析:核心原理与实践
  • uniapp开发中 解决App端 点击input输入框 整体上移
  • DocBench:面向大模型文档阅读系统的评估基准与数据集分析
  • win10/11网络防火墙阻止网络连接?【图文详解】防火墙阻止连接网络的解决方法
  • 电商 API 接口接入案例剖析​
  • LLAVA Visual Instruction Tuning——视觉语言通用模型的先驱
  • 从零开始学AI——12.2
  • LeetCode 188:买卖股票的最佳时机 IV
  • 基于跨境电商场景的智能商品管理系统,采用Bootstrap+Django+MySQL技术架构,实现用户行为追踪、智能推荐、多维度商品展示等核心功能
  • Python与自动化运维:构建智能IT基础设施的终极方案
  • QT----简单的htttp服务器与客户端
  • 【python】OpenCV—Defect Detection
  • 用人工智能设计海报
  • 深入底层:如何优雅部署 SeaTunnel 分离集群到 Kubernetes
  • mysql索引的用法
  • 录音智能转写:一键查看清单,下载功能如何实现?
  • AI Infra与LLM的联系与差异