一、题目解析
这里需要注意根节点的深度是1,也就是说计算深度的是从1开始计算的
二、算法原理
解法1:广度搜索,使用队列
解法2:深度搜索,使用递归
当计算出左子树的深度l,与右子树的深度r时,总的深度为max(l,r)+1
当root == nullptr时,返回0,此时该节点递归返回的值是1,然后依次返回
先递归我们的左树, 此时根节点为B,B在递归,左树为空,右树也为空,此时B树的深度为max(0,0)+1=1,然后B树递归完,继续递归右树C,C为根节点继续递归,C的左树D继续递归,D的左右子树为空,D递归结果为1返回,C的右树为空返回0,此时C树的深度为max(1,0)+1=2,C的深度为2,A的深度为B,C子树的最大值加1,所以最终递归结果为3。
在递归时,需要我们自己去画递归展开图去体会递归的过程,这里受限于篇幅原因,将递归展开图压缩了。
三、代码示例
class Solution {
public:
int maxDepth(TreeNode* root) {
if(root == nullptr) return 0;
return max(maxDepth(root->left),maxDepth(root->right))+1;
}
};
代码很简短,但重要的是了解递归展开的逻辑,明白为啥这样能得出正确答案。
看到最后,如果对您有所帮助,还请点赞、收藏和关注,点点关注不迷路,我们下期再见!