劍指offer,每日一練
阿新 • • 發佈:2018-11-08
題目:
1、重建二叉樹:
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。
時間限制:1秒 空間限制:32768K 熱度指數:472823
/* function TreeNode(x) { this.val = x; this.left = null; this.right = null; } */ function reConstructBinaryTree(pre, vin) { // write code here var result =null; if(pre.length>1){ var root = pre[0]; //找到根節點 var vinRootIndex = vin.indexOf(root); //中序序列中找到根節點的位置,返回3; var vinLeft = vin.slice(0,vinRootIndex); //中序序列左節點子序列 var vinRight = vin.slice(vinRootIndex+1,vin.length); //中序序列右節點子序列 pre.shift(); //把陣列的第一個元素從先序序列中刪除,並返回第一個元素的值。1; 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; }
2、重建二叉表
輸入一個連結串列,按連結串列值從尾到頭的順序返回一個ArrayList。
時間限制:1秒 空間限制:32768K 熱度指數:689020
本題知識點: 連結串列
/*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { // write code here var ArrayList = []; while(head){ ArrayList.unshift(head.val); //把一個元素新增到陣列的開頭,並返回陣列的新長度。 head=head.next; } return ArrayList; }