解题思路
这是个比较暴力的解法,但优点是容易理解。题目要求二叉树的高度,换而言之就是求树的层数,很容易的我们就想到用层次遍历。核心的就是在层次遍历时,如何判断此层已遍历完然后给已求层数加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 排版