前端常見算法面試題之 - 重建二叉樹[JavaScript解法]

題目描述

輸入某二叉樹的前序遍歷和中序遍歷的結(jié)果,請(qǐng)重建出該二叉樹。假設(shè)輸入的前序遍歷和中序遍歷的結(jié)果中都不含重復(fù)的數(shù)字。例如輸入前序遍歷序列[1,2,4,7,3,5,6,8],和中序遍歷序列[4,7,2,1,5,3,8,6],則重建二叉樹并返回

實(shí)現(xiàn)思路

根據(jù)前序遍歷和中序遍歷的定義,我們不難發(fā)先輸入數(shù)據(jù)可以進(jìn)行如下拆分

在這里插入圖片描述

既然我們已經(jīng)分別找到了左、右子樹的前序遍歷和中序遍歷,那么我們就可以用同樣的方法分別去構(gòu)建左右子樹,進(jìn)行遞歸推導(dǎo)

代碼實(shí)現(xiàn)


function reConstructBinaryTree(pre, vin) {
        if(pre.length==0||vin.length==0){
                return null;
        };
        
        //前序第一個(gè)為根節(jié)點(diǎn) 也是中序左右子樹的分割點(diǎn)
        var index=vin.indexOf(pre[0]);
        var left=vin.slice(0,index);//中序左子樹
        var right=vin.slice(index+1);//中序右子樹
        
        return {
            val:pre[0],
            //遞歸左右子樹的前序,中序
            left:reConstructBinaryTree(pre.slice(1,index+1),left),
            right:reConstructBinaryTree(pre.slice(index+1),right)
        };
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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