劍指offer--4.重建二叉樹
阿新 • • 發佈:2019-04-19
遍歷序列 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.重建二叉樹