持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第1天,点击查看活动详情
力扣100——二叉树的最大深度
题目
求二叉树的最大深度这道题虽然是简单题,但是在面试当中经常会考这道题的解法,并且给你的时间不会多,因此我们需要在日常的刷题当中对这类题目做到轻车熟路,当面试问到的时候可以马上写出来。题目:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
解题思路
这道题是一道关于二叉树的题目,我们在做有关于二叉树的题目的时候,首先想到的方法就是递归。而本题求的是二叉树的最大深度。我们知道,树有很多种遍历方法,其中,深度优先遍历(DFS)和我们这题很相似。从根节点出发,沿着左子树方向进行纵向遍历,直到找到叶子节点为止。然后回溯到前一个节点,进行右子树节点的遍历,直到遍历完所有可达节点为止。本题我们需要求的最大深度,实际上就是深度遍历的路径。
我们使用递归的方法来进行求解,是哦哟递归,首先要找到递归点,也就是递归的终止条件,在二叉树当中,很明显,条件就是当节点为null
的时候,递归接束。当节点为null
的时候,表示我们已经递归到了树的最底部,并且这一层的深度为0,因为这一层并没有存放左右子节点,也没有值,所以为0。接下来,我们分别对左右子树进行递归,当递归到null
的时候返回,并且每一层的返回数加一,表示层数加一。
代码
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
// 判断当前节点是否为null,如果为null,则返回0
if(!root){
return 0;
}
// 节点递归左子树
const leftDepth = maxDepth(root.left);
// 递归节点右子树
const rightDepth = maxDepth(root.right);
// 去左右子树当中最深的(数值较大)的加一返回
return Math.max(leftDepth,rightDepth) + 1;
};