题目:
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
方法一:使用迭代法,层序遍历。
二叉树的最大层数是它的深度。因此一层层遍历二叉树,记录的 遍历的层数 就是二叉树的深度。
代码如下:
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==nullptr) return 0;
queue<TreeNode*> que;
que.push(root);
int sum=0; //记录遍历的层数
while(!que.empty()){
int size=que.size();
sum++;
for(int i=0;i<size;i++){
TreeNode* node=que.front();
que.pop();
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
}
return sum;
}
};
方法二:递归法
根节点的高度就是二叉树的最大深度。
因此可通过后序(左右中)求的根节点高度来求的二叉树最大深度。
- 二叉树节点的深度:从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)
- 二叉树节点的高度:从该节点到叶子节点的最长简单路径边的条数后者节点数(取决于高度从0开始还是从1开始)
先求出左子树的深度,再求出右子树的深度,最后取左右子树深度的最大值+1(+1是因为要算上中间的节点),此时可求出当前节点为根节点的树的深度。
代码如下:
class Solution {
public:
int maxhi(TreeNode* node){
if(node==nullptr) return 0;
int nl=maxhi(node->left); //左
int nr=maxhi(node->right); //右
int maxd=1+max(nl,nr); //中
return maxd;
}
int maxDepth(TreeNode* root) {
return maxhi(root);
}
};
对代码进行简化:
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root==nullptr) return 0;
return 1+max(maxDepth(root->left),maxDepth(root->right));
}
};
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/description/