这是我参与「第四届青训营 」笔记创作活动的的第8天
bytedance.feishu.cn/file/boxcne…
- JS是动态类型、弱类型语言;
- TS是静态类型、弱类型语言。
Typescript
静态类型
- 可读性增强:基于语法解析TSDoc,ide增强
- 可维护性增强:在编译阶段暴露出大部分错误
JS的超集
- 包含于兼容所有JS特性,支持共存;
- 支持渐进式引入与升级。
基础数据类型
对象类型
函数类型
函数重载
数组类型
Typescript补充类型
Typescript泛型
算法:重建二叉树
题目:
输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输 入前序遍历序列 {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;
};