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

Leetcode刷题营第二十九,三十题:二叉树的中序以及后序遍历

94.二叉树的中序遍历

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

示例 1:

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

示例 2:

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

示例 3:

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

提示:

  • 树中节点数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

进阶: 递归算法很简单,你可以通过迭代算法完成吗?

思路:类似于我们之前讲过的递归算法中序遍历二叉树:二叉树的遍历

        这里我们需要返回的是数组,数组中的元素是按照中序遍历的顺序,同时返回数组的大小,也就意味着我们需要先计算二叉树的大小,该方法我们在二叉树的遍历中同样也实现了

代码实现:

int TreeSize(struct TreeNode* root){if(!root){return 0;}return 1+TreeSize(root->left)+TreeSize(root->right);
}void Inorder(struct TreeNode* root,int*arr,int* index){if(!root){return;}Inorder(root->left,arr,index);arr[*index]=root->val;(*index)++;Inorder(root->right,arr,index);
}int* inorderTraversal(struct TreeNode* root, int* returnSize){if(!root){* returnSize = 0;return NULL;} int size = TreeSize(root);* returnSize = size;int* arr = (int*)malloc(sizeof(int)*size);int index = 0;Inorder(root,arr,&index);return arr;
}

145. 二叉树的后序遍历


145. 二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 

示例 1:

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

输出:[3,2,1]

解释:

示例 2:

输入:root = [1,2,3,4,5,null,8,null,null,6,7,9]

输出:[4,6,7,5,2,9,8,3,1]

解释:

示例 3:

输入:root = []

输出:[]

示例 4:

输入:root = [1]

输出:[1]

提示:

  • 树中节点的数目在范围 [0, 100] 内
  • -100 <= Node.val <= 100

算法思路:与我们的中序遍历一样:思路同样参考二叉树的遍历

代码实现如下:

int TreeSize(struct TreeNode* root){if(!root){return 0;}return 1+TreeSize(root->left)+TreeSize(root->right);
}void PostOrder(struct TreeNode* root,int*arr,int* index){if(!root){return;}PostOrder(root->left,arr,index);PostOrder(root->right,arr,index);arr[*index]=root->val;(*index)++;
}int* postorderTraversal(struct TreeNode* root, int* returnSize){if(!root){* returnSize = 0;return NULL;} int size = TreeSize(root);* returnSize = size;int* arr = (int*)malloc(sizeof(int)*size);int index = 0;PostOrder(root,arr,&index);return arr;
}

好了,本期关于二叉树的遍历就到这里结束了,相信大家对于二叉树的遍历已经十分得心应手了,这里递归的思想非常重要,但是对于那些比较大的树,深树,递归的方式往往容易栈溢出。我们会采取迭代加栈与队列以及层序的方式来完成--这些内容会留到c++部分进行讲解。谢谢大家的点赞和收藏!!

http://www.lryc.cn/news/591780.html

相关文章:

  • Docker 镜像原理
  • 在windows平台上基于OpenHarmony sdk编译三方库并暴露给ArkTS使用(详细)
  • 深入理解Java中的Map.Entry接口
  • AI问答-供应链管理:各种交通运输方式货运成本分析
  • C/C++---rdbuf()函数
  • 建筑兔零基础人工智能自学记录111|初识comfyui-20
  • 系统设计时平衡超时时间与多因素认证(MFA)带来的用户体验下降
  • VMware Workstation Pro 17下载安装
  • 安装wsl-Ubuntu到D盘
  • 微信远程控制系统2.0
  • 如何下载视频 (pc端任何视频均可下载)
  • 通义万相-文生视频实践
  • Redis主从复制数据同步实现原理详细介绍
  • 【LeetCode刷题指南】--数组串联,合并两个有序数组,删除有序数组中的重复项
  • Install Docker Engine on UbuntuMySQL
  • Docker国内镜像
  • 网络服务(第一次作业)
  • 【Servo】伺服驱动器扫频功能方案文档
  • 微信小程序地理定位功能
  • 批判式微调(CFT):原理、架构与高效推理训练新范式
  • ubuntu系统+N卡 | docker compose+ollama+dify
  • Springboot绑定Date类型时出现日期转换异常问题
  • SpringBoot02-application配置文件
  • (转)Kubernetes基础介绍
  • 累和,累积,斐波拉契
  • X00218-基于机器学习的磁流变液迟滞性能分析python实现
  • SpringBoot01-springBoot的特点
  • 如何用 Python + LLM 构建一个智能栗子表格提取工具?
  • VSCode 配置 C# 开发环境完整教程(附效果截图)
  • 深入解析Hadoop:机架感知算法与数据放置策略