请勿第一时间看答案,先自己思考,思考不出来,再看答案
给定一个二叉树 root ,返回其最大深度。
二叉树的最大深度:是指从根节点到最远叶子节点的最长路径上的节点数。如下图所示的二叉树,最大深度为 3
原题地址:leetcode 104
使用递归来解题,主要只关注两个问题
我们假定函数 maxDepth(root)
已经可以计算出以 root
为根节点的二叉树的最大深度,那么,对于左右两个子节点,我们会返回值更大的那一边,所以就有如下关系
Math.max(maxDepth(root.left), maxDepth(root.right))
当然,每计算一次,会增加一层,所以最终的结果应该是
Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
最后我们来思考终止条件。理论上来说,当我们找到叶子节点时,最大深度为 1,所以我们可以返回 1,但是由于在上面的规律中,我们会将左节点与右节点继续传入,叶子节点的左节点与右节点为空
所以,终止条件为
if (!root) return 0
完整代码如下
10class TreeNode {20val: number30left: TreeNode | null40right: TreeNode | null50constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {60this.val = (val===undefined ? 0 : val)70this.left = (left===undefined ? null : left)80this.right = (right===undefined ? null : right)90}10}1112export function maxDepth(root: TreeNode | null): number {13if (root === null) {14return 015}16return Math.max(maxDepth(root.left), maxDepth(root.right)) + 117};