《五月集训》第十九天——二叉树
文章目录
- 前言
- 💎一、题目一
-
- 🏆1.题目描述
- 🏆2.解题思路
- 🏆3.代码详解
- 💎二、题目二
-
- 🏆1.题目描述
- 🏆2.解题思路
- 🏆3.代码详解
- 💎三、题目三
-
- 🏆1.题目描述
- 🏆2.解题思路
- 🏆3.代码详解
- 💎四、题目四
-
- 🏆1.题目描述
- 🏆2.解题思路
- 🏆3.代码详解
- 💎五、星球推荐
前言
二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分 。
二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点
刷题坚持每一天,以下题目引用自:力扣(LeetCode)
💎一、题目一
🏆1.题目描述
原题链接:144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,2,3]
🏆2.解题思路
🔑思路:
先访问根节点,在访问左子树、右子树。
🏆3.代码详解
void preorder(struct TreeNode* root, int* ans, int* idex){ if(root == NULL) return; ans[(*idex)++] = root->val; preorder(root->left, ans, idex); preorder(root->right, ans, idex);}int* preorderTraversal(struct TreeNode* root, int* returnSize){ int* ans = (int*)malloc(sizeof(int)*101); int idex = 0; preorder(root, ans, &idex); * returnSize = idex; return ans;}
💎二、题目二
🏆1.题目描述
原题链接:94. 二叉树的中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]
🏆2.解题思路
🔑思路:
先访问左子树,在访问根节点、右子树。
🏆3.代码详解
void inorder(struct TreeNode* root, int* ans, int* idex){ if(root == NULL) return; inorder(root->left, ans, idex); ans[(*idex)++] = root->val; inorder(root->right, ans, idex);}int* inorderTraversal(struct TreeNode* root, int* returnSize){ int* ans = (int*)malloc(sizeof(int)*101); int idex = 0; inorder(root, ans, &idex); * returnSize = idex; return ans;}
💎三、题目三
🏆1.题目描述
原题链接:145. 二叉树的后序遍历
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
示例 1:
输入:root = [1,null,2,3]
输出:[3,2,1]
🏆2.解题思路
🔑思路:
先访问左子树,再访问右子树、根节点。
🏆3.代码详解
void postorder(struct TreeNode* root, int* ans, int* idex){ if(root == NULL) return; postorder(root->left, ans, idex); postorder(root->right, ans, idex); ans[(*idex)++] = root->val;}int* postorderTraversal(struct TreeNode* root, int* returnSize){ int* ans = (int*)malloc(sizeof(int)*101); int idex = 0; postorder(root, ans, &idex); * returnSize = idex; return ans;}
💎四、题目四
🏆1.题目描述
原题链接:104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例 1:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
🏆2.解题思路
🔑思路:
递归遍历左右子树,当左、右孩子不为空深度就加一。
🏆3.代码详解
int maxDepth(struct TreeNode* root){ if(root == NULL) return NULL; int left_maxDepth = 1; int right_maxDepth = 1; if(root->left) left_maxDepth = left_maxDepth + maxDepth(root->left); if(root->right) right_maxDepth = right_maxDepth + maxDepth(root->right); return right_maxDepth > left_maxDepth ? right_maxDepth : left_maxDepth;}
💎五、星球推荐
星球链接:英雄算法联盟
星球里有什么?
【朋友圈】一个极致精准的自律、编程、算法的小圈子。
【算法集训】以月为单位组织算法集训,每天四题,风雨无阻。
【排行榜】每天、每周都会有榜单,激励大家不断进步,不断成长。
【个人规划】每个人都写好自己的规划,也可以查看他人的规划,时刻警醒自己不掉队。
【打卡挑战】每日一题打卡、每日早起打卡、算法集训打卡、规划完成情况打卡。
在星球里做什么?
目前星球人数达到420+,在星球里你能够遇到一群志同道合之人,因为都是花钱进来的,你不会看到任何浑水摸鱼的人,每个人都有自己的每月规划,星主每月都会组织算法集训,每天一起刷题,你可以看到别人的解题报告,取其之长,补己之短。