前端常見演算法面試題之 - 重建二叉樹[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) }; }