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

題目描述

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

實現思路

根據前序遍歷和中序遍歷的定義,我們不難發先輸入數據可以進行如下拆分

在這里插入圖片描述

既然我們已經分別找到了左、右子樹的前序遍歷和中序遍歷,那么我們就可以用同樣的方法分別去構建左右子樹,進行遞歸推導

代碼實現


function reConstructBinaryTree(pre, vin) {
        if(pre.length==0||vin.length==0){
                return null;
        };
        
        //前序第一個為根節點 也是中序左右子樹的分割點
        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)
        };
}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。