

🔥个人主页:艾莉丝努力练剑 ❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题 🍉学习方向:C/C++方向 ⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平

前言:牛客网和LeetCode的刷题都不可或缺,我们都要做一做,无论是参加竞赛还是笔试面试,至少能提升你的代码能力!洛谷的题目也可以去做一做。力扣的题目对提升代码能力很有帮助,需要有一点基础,几乎都是接口型的题目,关于接口型和IO型的区别我们在本专栏的第一篇【LeetCode】力扣题——轮转数组、消失的数字、数组串联中就介绍过了,这里不再赘述,我们进入今天的力扣题目介绍——
正文
一、二叉树的最大深度问题
(一)思路
(二)解题过程
(三)完整代码
二、二叉树的遍历问题
(一)思路
(二)解题过程
(三)完整代码
结尾
博主题解链接:求解二叉树最大深度问题
题目描述:

题目示例和提示——

我们的思路是:二叉树的高度=根节点+max(左子树的高度,右子树的高度)。
如下图所示,我们按照思路再过一遍——

/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
int maxDepth(struct TreeNode* root)
{
if(root == NULL)
{
return 0;
}
int leftDep = maxDepth(root->left);
int rightDep = maxDepth(root->right);
//根节点+max(左子树高度,右子树高度)
return 1 + (leftDep > rightDep ? leftDep : rightDep);
}
复杂度:时间复杂度:Ologn),空间复杂度:O(n)。
牛客网链接:KY11 二叉树遍历
题目描述:

我们的思路是:根据前序遍历(即先序遍历)已知根节点是A,再建立一个二叉树,然后再对这个二叉树进行中序遍历。

代码演示:
#include <stdio.h>
//二叉树的定义
typedef struct BinaryTreeNode{
char data;
struct BinaryTreeNode* left;
struct BinaryTreeNode* right;
}BTNode;
BTNode* buyNode(char ch)
{
BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));
newnode->data = ch;
newnode->left = newnode->right = NULL;
if(newnode == NULL)
{
perror("malloc fail!");
exit(1);
}
return newnode;
}
//构建二叉树
BTNode* creatTree(char*arr,int* pi)
{
if(arr[*pi] == '#')
{
(*pi)++;
return NULL;
}
BTNode* root = buyNode(arr[(*pi)++]);
root->left = creatTree(arr,pi);
root->right = creatTree(arr,pi);
return root;
}
void InOrder(BTNode* root)
{
if(root == NULL)
{
return;
}
InOrder(root->left);
printf("%c ",root->data);
InOrder(root->right);
}
int main()
{
//读取输入的字符串,保存在数组中
char arr[100];
scanf("%s",arr);
//根据先序遍历创建二叉树
int i = 0;
BTNode* root = creatTree(arr,&i);
//中序遍历
InOrder(root);
return 0;
}定义二叉树的



复杂度:时间复杂度:O(logn),空间复杂度:O(n)。
往期回顾:
【LeetCode&数据结构】二叉树的应用(一)——单值二叉树问题、相同的树问题、对称二叉树问题、另一棵树的子树问题详解
由于本专栏的篇数越来越多,为了避免文章链接挂太多影响观感,博主之后的每一篇力扣刷题详解都只会附上前一篇的链接,最后一次完整链接是在之后会发布的【栈的应用——有效的括号问题详解】和【单链表的应用——环形链表问题详解】的文章结尾,本意是为了方便大家找到相应的详细的题解,现在文章多了,铸币博主没办法一一罗列,而且还会有“凑字数”的嫌疑,力扣刷题专栏的链接每次都会放在文章开头的位置,大家可自行前往! 感谢大家的理解与支持!
【LeetCode&数据结构】栈的应用——有效的括号问题详解
【LeetCode&数据结构】单链表的应用——环形链表问题详解
结语:本篇文章到这里就结束了,本文讲述的四道代码题并不适合C语言初学者,需要有一定的C语言基础,要学完数据结构与算法的算法复杂度和二叉树的知识,才能写出复杂度较优的代码来。大家一定要自己动手敲一敲,不敲的话不仅容易忘记,也不方便将来复习。