给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2
最大深度是从根节点到最远叶子节点的最长路径上的节点数
采用递归的方法
1、确定递归函数的参数以及返回值,那肯定是int型辣
2、确定终止条件:当节点为空的时候,说明这个节点到头了,可以计算深度了
3、确定单程循环的逻辑:先求左子树的深度,再求右子树的深度,最后最大深度是左右子树的深度+1,因为要包含当前节点的高度
所以代码就是:
class solution
{
public:
//确定返回值类型
int getdepth(TreeNode* node)
{
//确定终止条件
if (node == NULL)return 0;
//确定单层循环的逻辑:先求左边子树的深度,求右边子树的深度,然后取最大值+1
int leftdepth = getdepth(node->left);
int rightdepth = getdepth(node->right);
int depth = max(leftdepth, rightdepth) + 1;
return depth;
}
int maxdepth(TreeNode* root)
{
return getdepth(root);
}
};
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
返回它的最小深度 2.
那么这道题最小深度是从根节点到最近叶子节点的最短路径上的节点数量,注意是叶子节点,叶子节点也就是左右孩子为空的节点
采用递归的方法
1、确定返回值类型,毫无疑问,是int型
2、确定终止条件:当节点为空的时候
3、确定单层循环的逻辑:
最小的深度:考虑叶子节点是左右孩子为空的节点
当左孩子是空,右孩子不是空的时候,这个时候最小深度就是1+左子树的深度
同理,当左孩子不为空,右孩子是空的时候,这个时候最小深度就是1+右子树的深度
class solution
{
public:
int getmindepth(TreeNode* node)
{
//终止条件
if (node == NULL)return 0;
//确定单层循环的逻辑
int leftdepth = getmindepth(node->left);
int rightdepth = getmindepth(node->right);
if (node->left == NULL && node->right != NULL)
{
return 1 + rightdepth;
}
if (node->left != NULL && node->right == NULL)
{
return 1 + leftdepth;
}
int result = 1 + min(leftdepth, rightdepth);
return result;
}
int mindepth(TreeNode* root)
{
return getmindepth(root);
}
};