leetcode每天一题:【二叉树的最大深度】(简单)

309 阅读2分钟

这是我参与2022首次更文挑战的第29天,活动详情查看:2022首次更文挑战

题目描述

给你一个二叉树,需要你找出这个二叉树的最大深度。

最大深度是指从根节点到最远的叶子节点(也就是没有左右子节点的节点),经过了几层。

举个例子:(手工画图,凑合着看)

这个二叉树的最大深度是 2(如1->2)

image.png

这个二叉树的最大深度是 3(如1->2->4)

image.png

这个二叉树的最大深度是 4(如1->3->5->7)

image.png

思路分析

第一种方法(递归)

我们可以使用递归的方法去遍历二叉树,首先是根节点是第一层。

根节点的左边树,右边树是第二层。以此类推。

具体的实现是:

我们可以先定义个变量maxLevel, 代表的是二叉树最大层级。

然后定义个find函数,接受2个参数,一个是节点,一个是当前的层级。

如果没有节点,则直接返回。继续遍历。

需要注意的是,同一层的二叉树只需要加一次,不用每个都加,所以这里有个判断,

如果二叉树最大层级小于等于当前的层级,则最大层级才加一。否则不处理。

然后继续遍历节点的左边数和节点的右边树。层级的参数为当前的层级加一传入。

遍历到最后,maxLevel就是最大的层级。

返回即可。

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function (root) {
  let maxLevel = 0
  function find (root, level) {
    if (!root) return
    if(maxLevel <= level) maxLevel = level + 1
    find(root.left, level + 1)
    find(root.right, level + 1)
  }
  find(root, maxLevel)
  return maxLevel
};

image.png

第二种方法(递归)

跟第一种方法类似,也是递归,但是它是使用了Math.max方法。对节点的左边树和右边树递归调用,每次递归调用的时候用Math.max的法取最大值,然后加一,代表当前节点的最大层级。

这样递归调用结束的时候,最终得到的是最大的层级,也就是二叉树的最大深度。

返回即可。

代码如下:

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function (root) {
  if (!root) return
  return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};

image.png