劍指offer(4)重建二叉樹


題目描述

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

題目分析

本題主要考察了二叉樹的遍歷,先復習下

前序遍歷(VLR): 
    1.訪問根節點 
    2.前序遍歷左子樹 
    3.前序遍歷右子樹 
中序遍歷(LVR): 
    1.中序遍歷左子樹 
    2.訪問根節點 
    3.中序遍歷右子樹 
后序遍歷(LRV): 
    1.后序遍歷左子樹 
    2.后序遍歷右子樹 
    3.訪問根節點

總之,做這種有關樹、鏈表的題一定要有遞歸的思想,總之該題的解題思路就是四步,具體思路可以參考這里

1 確定根,確定左子樹,確定右子樹。

2 在左子樹中遞歸。

3 在右子樹中遞歸。

4 打印當前根。

代碼

/* function TreeNode(x) {
 this.val = x;
 this.left = null;
 this.right = null;
 } */
function reConstructBinaryTree(pre, vin) {
  // write code here
  if (pre.length === 0 || vin.length === 0) {
    return null;
  }
  // 前序第一個是根節點,也是中序左右子樹的分割點
  const index = vin.indexOf(pre[0]),
    left = vin.slice(0, index),
    right = vin.slice(index + 1);
  return {
    val: pre[0],
    // 遞歸左右子樹的前序、中序
    left: reConstructBinaryTree(pre.slice(1, index + 1), left),
    right: reConstructBinaryTree(pre.slice(index + 1), right)
  };
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM