算法刷题系列--leetcode #104 二叉树的最大深度

261 阅读1分钟

leetcode #104 二叉树的最大深度

解题思路

这是个比较暴力的解法,但优点是容易理解。题目要求二叉树的高度,换而言之就是求树的层数,很容易的我们就想到用层次遍历。核心的就是在层次遍历时,如何判断此层已遍历完然后给已求层数加1; 我的做法是,利用一个队列,维持当前遍历层的节点,然后每层遍历我都用循环把当前的节点 消耗掉(即出队),然后标记层数的变量加1;等到遍历下一层的时候,队列里已经没有上一层的节点了,清一色是本层的节点。通过这样的方法比较快速的能求出层数

代码

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @return {number}
 */
var maxDepth = function(root) {
    if(root === null) return 0;
    let num = 0; //记录层数
    let que = []; //遍历辅助队列
    que.push(root) //根节点入队
    while(que.length) { 
        let length = que.length //当前队列长度,目的是要清空到目前为止的队列的所有节点
        for(var i =0; i < length; i++) { //清空队列节点,当然不包含新入队的,因为新入队的是下一层的节点
            let cur = que.shift() //取队首首节点,并使之出队
            if(cur.left) { //左节点若存在并入队
                que.push(cur.left)
            }
            if(cur.right) { //右节点存在测入队
                que.push(cur.right)
            }
        }
        num++ //层数+1
    }
    return num;
};

本文使用 mdnice 排版