题目描述

输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。

递归解法

function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
}
function Depth(r) {
    if(r === null)
        return  0;
    return Math.max(Depth(r.left), Depth(r.right))+1;
}

非递归解法

function TreeDepth(r)
{
    if(r === null)
        return 0;
    var q = [];
    var depth = 0;
    q.push(r);
    // null原来标识当前层是否遍历完毕
    q.push(null);
    
    while(q.length !== 0){
        var cur = q.shift();
        // 当前弹出元素为null时,说明一层以及遍历完毕了,所以depth+1
        if(cur === null){
            depth++;
            if(q.length!==0)
                // 最后一层的null弹出时不能再往队列里面加null了
                q.push(null);
        } 
        else{
            if(cur.left !== null)
                q.push(cur.left);
            if(cur.right !== null)
                q.push(cur.right);
        }
    }
    
    return depth;
}



耳东
766 声望51 粉丝

知乎专栏:[链接]