问题描述:
给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
示例 1:
输入:root = [3,9,20,null,null,15,7] 输出:3
示例 2:
输入:root = [1,null,2] 输出:2
提示:
- 树中节点的数量在
[0, 104]
区间内。 -100 <= Node.val <= 100
解题思路:
本次可以采用分治思想解决,如果二叉树为空,就返回0,若不为空,利用递归返回左子树与右子树深度最大的+1即可。
注意尽量不要用以下代码,此时代码效率太低,每次进行递归之后,又重复进行相同的递归
int maxDepth(struct TreeNode* root)
{
if (root == NULL)
return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return maxDepth(root->left) > maxDepth(root->right) ? maxDepth(root->left)+1 : maxDepth(root->right) + 1;
}
可以将递归得到的值存起来会大大提高效率。 代码如下:
int maxDepth(struct TreeNode* root)
{
if (root == NULL)
return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}