给定一个二叉树 root
,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
这个题目很简单,但是我自身对于二叉树结构不是很了解,所以这个题目我开始不是很了解
那么对于二叉树结构来说,很重要的用法就是递归函数
二叉树的基本结构为一个节点,以及这个节点的左指针和右指针,即一个节点和最多两个子节点的结构
代码结构如下
class Solution {
public:
int maxDepth(TreeNode* root) {
if (root == nullptr) return 0;
int leftDepth = maxDepth(root->left);
int rightDepth = maxDepth(root->right);
return max(leftDepth, rightDepth) + 1;
}
};
所谓递归函数是指重复在函数中调用自身,在这个例子中,就是重复调用了这个找寻最大深度的函数,那么对于这样的函数,理解上最重要的就是入口和出口,入口就是输入的root这个二叉树结构,也就是输入进来的节点的指针,出口需要自己设计,这里设计的出口就是第一句吗,当节点为空指针的时候,函数递归结束,假设有这么一个二叉树
3
/ \
9 20
/ \
15 7
-
调用
maxDepth(root)
,root
为节点 3:- 进入
maxDepth(3)
。 - 计算
leftDepth
,即maxDepth(9)
。
- 进入
-
调用
maxDepth(9)
:- 进入
maxDepth(9)
。 - 左子节点为空,返回 0。
- 右子节点为空,返回 0。
- 返回
max(0, 0) + 1 = 1
。
- 进入
-
回到
maxDepth(3)
,计算rightDepth
,即maxDepth(20)
:- 进入
maxDepth(20)
。 - 计算
leftDepth
,即maxDepth(15)
。
- 进入
-
调用
maxDepth(15)
:- 进入
maxDepth(15)
。 - 左子节点为空,返回 0。
- 右子节点为空,返回 0。
- 返回
max(0, 0) + 1 = 1
。
- 进入
-
回到
maxDepth(20)
,计算rightDepth
,即maxDepth(7)
:- 进入
maxDepth(7)
。 - 左子节点为空,返回 0。
- 右子节点为空,返回 0。
- 返回
max(0, 0) + 1 = 1
。
- 进入
-
回到
maxDepth(20)
,返回max(1, 1) + 1 = 2
。 -
回到
maxDepth(3)
,返回max(1, 2) + 1 = 3
。
最终,maxDepth
返回 3,表示从根节点到最远叶子节点的最长路径上的节点数。