【刷算法】求二叉樹深度的遞歸以及非遞歸解法

問題形貌

輸入一棵二叉樹,求該樹的深度。從根結點到恭弘=叶 恭弘結點順次經由的結點(含根、恭弘=叶 恭弘結點)構成樹的一條途徑,最長途徑的長度為樹的深度。

遞歸解法

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;
}


    原文作者:亞古
    原文地址: https://segmentfault.com/a/1190000015364982
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞