# 【LeetCode题目详解】（五）144.二叉树的前序遍历、94.二叉树的中序遍历、145.二叉树的后序遍历、104.二叉树的最大深度、110.平衡二叉树

## 一、力扣第144题：二叉树的前序遍历

### 2.解题代码

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     struct TreeNode *left;
*     struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
else
{
return 1+TreeSize(root->left)+TreeSize(root->right);
}
}
void _prevOrder(struct TreeNode* root,int* arr,int* i)
{
if(root==NULL)
{
return;
}
arr[*i]=root->val;
(*i)++;
_prevOrder(root->left,arr,i);
_prevOrder(root->right,arr,i);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSize(root);
int* arr=(int*)malloc(sizeof(struct TreeNode)*size);
*returnSize=size;
int i=0;
_prevOrder(root,arr,&i);
return arr;
}

## 二、力扣第94题：二叉树的中序遍历

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     struct TreeNode *left;
*     struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
return 1+TreeSize(root->left)+TreeSize(root->right);
}
void _InOrder(struct TreeNode* root,int* arr,int* i)
{
if(root==NULL)
{
return ;
}
_InOrder(root->left,arr,i);
arr[*i]=root->val;
(*i)++;
_InOrder(root->right,arr,i);
}
int* inorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSize(root);
int* arr=(int*)malloc(sizeof(struct TreeNode)*size);
*returnSize=size;
int i=0;
_InOrder(root,arr,&i);
return arr;
}

## 三、力扣第145题：二叉树的后序遍历

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     struct TreeNode *left;
*     struct TreeNode *right;
* };
*/
/**
* Note: The returned array must be malloced, assume caller calls free().
*/
int TreeSize(struct TreeNode* root)
{
if(root==NULL)
{
return 0;
}
else
{
return 1+TreeSize(root->left)+TreeSize(root->right);
}
}
void _PostOrder(struct TreeNode* root,int* arr,int* i)
{
if(root==NULL)
{
return;
}
_PostOrder(root->left,arr,i);
_PostOrder(root->right,arr,i);
arr[*i]=root->val;
(*i)++;
}
int* postorderTraversal(struct TreeNode* root, int* returnSize){
int size=TreeSize(root);
int* arr=(int*)malloc(sizeof(struct TreeNode)*size);
*returnSize=size;
int i=0;
_PostOrder(root,arr,&i);
return arr;
}

## 四、力扣第104题：二叉树的最大深度

### 2.解题代码

/**
* 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 left_maxDepth=maxDepth(root->left);
int right_maxDepth=maxDepth(root->right);
return left_maxDepth>right_maxDepth?left_maxDepth+1:right_maxDepth+1;
}

## 五、力扣第110题：平衡二叉树

### 2.解题代码

/**
* 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 left_maxDepth=maxDepth(root->left);
int right_maxDepth=maxDepth(root->right);
return left_maxDepth>right_maxDepth?left_maxDepth+1:right_maxDepth+1;
}
bool isBalanced(struct TreeNode* root){
if(root==NULL)
{
return true;
}
int leftDepth=maxDepth(root->left);
int rightDepth=maxDepth(root->right);
return abs(leftDepth-rightDepth)<2
&& isBalanced(root->left)
&& isBalanced(root->right);
}

## 总结

|
14天前
|

12 3
|
1月前
|

10 1
|
1月前

13 1
|
1月前

14 1
|
1月前
|

22 2
|
1月前
|

【数据结构与算法】：关于时间复杂度与空间复杂度的计算（C/C++篇）——含Leetcode刷题-2
【数据结构与算法】：关于时间复杂度与空间复杂度的计算（C/C++篇）——含Leetcode刷题
27 2
|
1月前
|

【数据结构与算法】：关于时间复杂度与空间复杂度的计算（C/C++篇）——含Leetcode刷题-1
【数据结构与算法】：关于时间复杂度与空间复杂度的计算（C/C++篇）——含Leetcode刷题
34 2
|
1月前
|

【LeetCode刷题】二分查找：山脉数组的峰顶索引、寻找峰值
【LeetCode刷题】二分查找：山脉数组的峰顶索引、寻找峰值
24 1
|
1月前
|

【LeetCode刷题】滑动窗口解决问题：串联所有单词的子串（困难）、最小覆盖子串（困难）
【LeetCode刷题】滑动窗口解决问题：串联所有单词的子串（困难）、最小覆盖子串（困难）
20 1
|
1月前
|

【LeetCode刷题】滑动窗口解决问题：水果成篮、找到字符串中所有字母异位词
【LeetCode刷题】滑动窗口解决问题：水果成篮、找到字符串中所有字母异位词
26 1