前言
这是五月集训的第十九日,今日的训练内容是 二叉树
解题报告
1.力扣144
原题链接
题目概述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
解题思路
前序遍历,填入,过啦!
源码剖析
void preSearch(struct TreeNode* root, int* returnSize, int *nums){
if (root) {
nums[(* returnSize) ++] = root -> val;
preSearch(root -> left, returnSize, nums);
preSearch(root -> right, returnSize, nums);
}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int *nums = (int *)malloc(sizeof(int)*100);
* returnSize = 0;
preSearch(root, returnSize, nums);
return nums;
}
2.力扣94
原题链接
题目概述
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
解题思路
复制粘贴改个顺序,改个名字,过啦!
源码剖析
void preSearch(struct TreeNode* root, int* returnSize, int *nums){
if (root) {
preSearch(root -> left, returnSize, nums);
nums[(* returnSize) ++] = root -> val;
preSearch(root -> right, returnSize, nums);
}
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int *nums = (int *)malloc(sizeof(int)*100);
* returnSize = 0;
preSearch(root, returnSize, nums);
return nums;
}
3.力扣145
原题链接
题目概述
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。
解题思路
复制粘贴改个顺序,改个名字,过啦!
源码剖析
void preSearch(struct TreeNode* root, int* returnSize, int *nums){
if (root) {
preSearch(root -> left, returnSize, nums);
preSearch(root -> right, returnSize, nums);
nums[(* returnSize) ++] = root -> val;
}
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
int *nums = (int *)malloc(sizeof(int)*100);
* returnSize = 0;
preSearch(root, returnSize, nums);
return nums;
}
4.力扣104
原题链接
题目概述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
解题思路
构建一个函数对树进行遍历即可
源码剖析
//递归判断
int get_tree_depth(struct TreeNode* node)
{
int rightDepth = 1;
int leftDepth = 1;
//查找左子树
if(node->left != NULL)
{
leftDepth = rightDepth + get_tree_depth(node->left);
}
//查找右子树
if(node->right != NULL)
{
rightDepth = rightDepth + get_tree_depth(node->right) ;
}
if(leftDepth >= rightDepth)
{
return leftDepth;
}
else
{
return rightDepth;
}
}
int maxDepth(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return get_tree_depth(root);
}