✨欢迎来到脑子不好的小菜鸟的文章✨
创作不易,麻烦点点赞哦
所属专栏:刷题
我的主页:脑子不好的小菜鸟
文章特点:关键点和步骤讲解放在
代码相应位置
若想看更详细的二叉树相关题目,请移步:二叉树经典题题解(超全题目)(力扣)-CSDN博客
https://leetcode.cn/problems/maximum-depth-of-binary-tree/
104. 二叉树的最大深度
/*使用迭代法的话,使用层序遍历是最为合适的,因为最大的深度就是二叉树的层数,和层序遍历的方式极其吻合。
在二叉树中,一层一层的来遍历二叉树,记录一下遍历的层数就是二叉树的深度*/
/*法一:迭代法*/
class Solution {
public:
int maxDepth(TreeNode* root)
{
int deepth=0;
queueque;
int size;
if(root==NULL)
return 0;
TreeNode* cur=root;
que.push(cur);
while(!que.empty())
{
size=que.size();
deepth++;
while (size--)
{
cur = que.front();
que.pop();
if(cur->left) que.push(cur->left);
if(cur->right) que.push(cur->right);
}
}
return deepth;
}
};
/*后序遍历:虽然求的是高度,但是高度就等于最大深度*/
class Solution {
public:
int getHeight(TreeNode* cur)
{
if(cur==NULL) return 0;
int heightl=0,heightr=0,heightsum;
heightl = getHeight(cur->left);
heightr = getHeight(cur->right);
heightsum=max(heightl,heightr)+1;
return heightsum;
}
int maxDepth(TreeNode* root)
{
return getHeight(root);
}
};
https://leetcode.cn/problems/minimum-depth-of-binary-tree/
/*法一:迭代法*/
//最先左右孩子都为空的层数为最小深度
class Solution {
public:
int minDepth(TreeNode* root)
{
int deepth=0;
queueque;
TreeNode* cur=root;
int size;
if(root==NULL)
return 0;
que.push(cur);
while(!que.empty())
{
size = que.size();
deepth++;
while(size--)
{
cur=que.front();
que.pop();
if(cur->left) que.push(cur->left);
if(cur->right) que.push(cur->right);
/*注意是放在while(size--)里面*/
if(cur->left==NULL&&cur->right==NULL)
return deepth;
}
}
return deepth;
}
};
/*法二:后序遍历*/
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。,注意是叶子节点。左右孩子都为空的节点才是叶子节点
//如果左节点为空,右节点不为空,就return 1+右节点
// 右 左 左
//else return 1+min(heightl,heightr)
class Solution {
public:
int getHeithmin(TreeNode* cur)
{
if(cur==NULL) return 0;
int heightl,heightr;
//后序遍历
heightl = getHeithmin(cur->left);
heightr = getHeithmin(cur->right);
if(cur->left==NULL&&cur->right!=NULL) return 1+heightr;
else if(cur->left!=NULL&&cur->right==NULL) return 1+heightl;
else return 1+min(heightl,heightr);
}
int minDepth(TreeNode* root)
{
return getHeithmin(root);
}
};