LeetCode 104. 二叉树的最大深度
📌 题目描述
题目级别:简单
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
- 示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:3
💡 破题思路:自底向上递归 (Bottom-up DFS)
求树的最大深度,最优雅的方式是使用自底向上 的思维(其实也就是二叉树的后序遍历)。
我们可以这样思考:
如果我是一个节点,我怎么知道以我为根的这棵树有多深?
很简单,我只需要问我的左孩子:"你的左子树有多深?",再问我的右孩子:"你的右子树有多深?"。
我拿到他们俩的回答后,挑一个比较大的,然后加上我自己的这一层(+1),这就是我的最大深度!
然后我再把这个结果,理直气壮地汇报给我的父节点。
如此循环往复,直到最底层的空节点(空节点直接返回 0)。整个过程不需要借助任何外部的全局变量。
💻 C++ 代码实现 (1行代码极简版)
cpp
class Solution {
public:
int maxDepth(TreeNode* root) {
// 递归终止条件:如果节点为空,深度就是 0
if (root == nullptr) return 0;
// 拿到左子树的最大深度
int leftDepth = maxDepth(root->left);
// 拿到右子树的最大深度
int rightDepth = maxDepth(root->right);
// 取两者的最大值,加上当前节点自己的这 1 层,向上返回
return max(leftDepth, rightDepth) + 1;
// 💡 极客装杯写法,只需一行代码:
// return root ? max(maxDepth(root->left), maxDepth(root->right)) + 1 : 0;
}
};