1. 程式人生 > >劍指offer--4.重建二叉樹

劍指offer--4.重建二叉樹

遍歷序列 indexof slice 刪除 例如 ret truct clas treenode

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

思路:1. 前序遍歷首位是根節點,找到根節點之後,根據中序遍歷找到左右子樹

2. 把找到的根節點從pre裏刪除,分別找到1中的左右子樹, preleft preright vinleft vinright

   3. 然後左右子樹帶入1中

/* function TreeNode(x) {
    this.val = x;
    this.left = null;
    this.right = null;
} 
*/ function reConstructBinaryTree(pre, vin) { var result = null; if(pre.length>1) { var root= pre[0]; var vinrootindex = vin.indexOf(root); var vinleft = vin.slice(0,vinrootindex); var vinright = vin.slice(vinrootindex+1,vin.length); pre.shift();
var preleft = pre.slice(0,vinleft.length); var preright = pre.slice(vinleft.length,pre.length); result = { val : root, left : reConstructBinaryTree(preleft,vinleft), right : reConstructBinaryTree(preright,vinright) } } else if
(pre.length===1) { result={ val: pre[0], left: null, right: null } } return result; }

劍指offer--4.重建二叉樹