二叉樹深度&廣度遍歷

二叉樹的數(shù)據(jù)結構在js中可以如此表示:

const tree = {
    value: 1,
    left: {
        value: 2,
        left: {
            value: 4,
            left: {
                value: 8
            },
            right: {
                value: 9
            }
        },
        right: {
            value: 5
        }
    },
    right: {
        value: 3,
        left: {
            value: 6
        },
        right: {
            value: 7
        }
    }
}

我們分別采用深度和廣度遍歷一遍:

深度優(yōu)先

此處就使用前序遍歷了

遞歸實現(xiàn)

function dfsRecursion(tree) {
    let res = [];
    function dfs(node){
        if(node) {
            res.push(node.value);
            dfs(node.left);
            dfs(node.right);
        }
    }
    dfs(tree);
    return res;
}

非遞歸實現(xiàn)

/**
 * @param tree 
 * 非遞歸實現(xiàn),需要自行實現(xiàn)“回溯”,可以使用棧來巧妙實現(xiàn)
 * 將某個節(jié)點的右節(jié)點、左節(jié)點依次壓倒棧中,會先消費該左節(jié)點,再次將其右子節(jié)點、左子節(jié)點壓入棧...
 */
function dfsNonRecursion(tree) {
    let arr = [];
    let res = [];
    arr.push(tree);
    while (arr.length) {
        const node = arr.pop();
        res.push(node.value);
        if (node.right) {
            arr.push(node.right);
        }
        if (node.left) {
            arr.push(node.left);
        }
    }
    return res
}

廣度優(yōu)先

function bfs(tree) {
    let res = [];
    let arr = [];
    arr.push(tree);
    while(arr.length) {
        const node = arr.shift();
        res.push(node.value);
        if(node.left) {
            arr.push(node.left);
        }
        if(node.right) {
            arr.push(node.right);
        }
    }
    return res;
}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容