1. 程式人生 > >劍指offer,每日一練

劍指offer,每日一練

題目:

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;
}