题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
解题思路1
bfs的解法
用int型变量res来记录结果。初始值为0.
1.首先特判树为空的时候,直接return res,即0.
2.非空时,我们就用bfs扫一遍,每扫完一层让res+1就行了。这里所说的res就是我bfs中用的count。
代码1
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
void bfs(TreeNode* root ,int &count){ //注意这里用&,因为变量的值是要返回回来的。
queue<TreeNode*> q; //队列q用来存储结点
q.push(root); //根节点入队
while(!q.empty()){ //队列非空时
int sz=q.size(); //sz用来记录当前一层有多少个元素
while(sz>0){ //遍历当前层
TreeNode* p=q.front(); //p记录q的队头元素,即当前层的每个结点
q.pop(); //出队
if(p->left!=NULL){ //当前结点的左孩子如果非空,就入队
q.push(p->left);
}
if(p->right!=NULL){ //当前结点的右孩子如果非空,就入队
q.push(p->right);
}
sz--;
}
count++; //当前一层遍历完之后,count++,即深度+1
}
}
int maxDepth(TreeNode* root) {
int res=0; //res来记录深度,初始值为0
if(root==NULL){ //空树时,直接返回0
return res;
}
bfs(root,res); //不空时,我们用dfs扫一遍,并且把结果保存在res中带回来
return res;
}
};
解题思路2
dfs解法
退出条件:当扫到空的时候,返回0。
当前树的最大深度就是 :max(左孩子的深度,右孩子的深度),意思是返回左孩子与右孩子中深度比较大的那一个,然后再加上1,(因为当前算上当前结点之后深度就要加一了)
代码2
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int dfs(TreeNode* root,int &res){
if(root==NULL){ //如果扫到了空结点,那么就返回,因为空结点的深度为0
return 0;
}
//当前结点的最大深度=左结点深度与右结点深度中比较大的那一个,再加上1。
//我们要记住在当前题目中dfs函数的作用就是用来求深度的。
res=max(dfs(root->left,res),dfs(root->right,res))+1;
return res; //最后返回res给主函数
}
int maxDepth(TreeNode* root) {
int res=0;
return dfs(root,res);
}
};