前端算法-叉树的最大深度

113 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情

题目

给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。

说明: 叶子节点是指没有子节点的节点。

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7
返回它的最大深度 3

题解

我们先判断当前的出参root是否存在,如果不存在则直接返回0,接下来我们声明一个stack常量,它是一个栈,用来它存储当前的出参root,在声明一个num变量,他是用于记录当前节点树的层级,每对节点树循环一次num变量则加1,然后进行循环,循环的判断条件是stack变量的长度不等于0,然后在循环内,我们获取到当前stack变量的长度并用len变量记录起来,然后在将专门用于记录节点数的层级num变量进行自增1,我们这里在使用一个循环,这个循环的判断条件为len长度为0,我们每次执行循环的时候,都会对len变量进行自减1,在循环内部我们使用shift方法拿出当前节点树并且用常量o存储起来,然后进行判断当前o常量的左节点是否存在,如果存在则使用push方法添加到stack栈中,然后在进行判断o常量的右节点是否存在,如果存在则也使用push方法添加到stack栈中,最后当循环完成后,则将记录节点深度的变量num返回出去即可

/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
      if (!root) return 0;
      const stack = [root];
            let num = 0;
            while (stack.length!=0) {
                let len = stack.length;
                num++;
                while (len--) {
                    const o = stack.shift();
                    if (o.left) {
                        stack.push(o.left)
                    }
                    if (o.right) {
                        stack.push(o.right)
                    }
                }
            }
            return num;
};

坚持努力,无惧未来!