Typescript入门|青训营笔记

66 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第8天


bytedance.feishu.cn/file/boxcne…

  • JS是动态类型、弱类型语言;
  • TS是静态类型、弱类型语言。

Typescript

静态类型

  • 可读性增强:基于语法解析TSDoc,ide增强
  • 可维护性增强:在编译阶段暴露出大部分错误

JS的超集

  • 包含于兼容所有JS特性,支持共存;
  • 支持渐进式引入与升级。

基础数据类型

image.png

对象类型

image.png

函数类型

image.png

函数重载

image.png

数组类型

image.png

Typescript补充类型

image.png

Typescript泛型

image.png

算法:重建二叉树

题目:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输 入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {4,7,2,1,5,3,8,6},则重建二叉树并返回。

思路:

利用递归的思想来求解,首先先序序列中的第一个元素一定是根元素。然后我们去中序遍历中寻找到该元素的位置,找到后该元素的左 边部分就是根节点的左子树,右边部分就是根节点的右子树。因此我们可以分别截取对应的部分进行子树的递归构建。使用这种方式的 时间复杂度为 O(n),空间复杂度为 O(logn)。

var buildTree = function(preorder, inorder) {
    if (preorder === null || inorder === null || preorder.length <= 0) return null;

    const nodeVal = preorder[0];
    const node = new TreeNode(nodeVal);

    //在中序遍历序列中查找前序遍历第一个元素(父节点)的下标
    //i有两个含义,一个是根节点在中序遍历结果中的下标,另一个是当前左子树的节点个数
    for (var i = 0; i < inorder.length; i++){
        if (inorder[i] === nodeVal) {
            break;
        }
    }

    node.left = buildTree(preorder.slice(1, i + 1), inorder.slice(0, i));
    node.right = buildTree(preorder.slice(i + 1), inorder.slice(i + 1));
    return node; 

};