请勿第一时间看答案, 先自己思考, 思考不出来, 再看答案
给定一个二叉树 root , 返回其最大深度.
二叉树的最大深度:是指从根节点到最远叶子节点的最长路径上的节点数. 如下图所示的二叉树, 最大深度为 3

原题地址:leetcode 104
使用递归来解题, 主要只关注两个问题
我们假定函数 maxDepth(root) 已经可以计算出以 root 为根节点的二叉树的最大深度, 那么, 对于左右两个子节点, 我们会返回值更大的那一边, 所以就有如下关系
1Math.max(maxDepth(root.left), maxDepth(root.right))
当然, 每计算一次, 会增加一层, 所以最终的结果应该是
1Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
最后我们来思考终止条件. 理论上来说, 当我们找到叶子节点时, 最大深度为 1, 所以我们可以返回 1, 但是由于在上面的规律中, 我们会将左节点与右节点继续传入, 叶子节点的左节点与右节点为空
所以, 终止条件为
1if (!root) return 0
完整代码如下
01class TreeNode {02val: number03left: TreeNode | null04right: TreeNode | null05constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {06this.val = (val===undefined ? 0 : val)07this.left = (left===undefined ? null : left)08this.right = (right===undefined ? null : right)09}10}1112export function maxDepth(root: TreeNode | null): number {13if (root === null) {14return 015}16return Math.max(maxDepth(root.left), maxDepth(root.right)) + 117};