Skip to content

Commit afa042f

Browse files
committed
第二周周三学习
1 parent 1f87bde commit afa042f

2 files changed

Lines changed: 90 additions & 3 deletions

File tree

Week02/NOTE.md

Lines changed: 66 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
# 哈希表、映射、集合的实现与特性
2-
## Hash table
1+
# 第二周学习笔记
2+
## 哈希表、映射、集合的实现与特性
3+
### Hash table
34
* 定义
45
* 哈希表也叫散列表,是根据关键码值(key value)而直接进行访问的数据结构。
56
* 通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数(Hash Function),存放记录的数组叫哈希表(或散列表)
@@ -8,4 +9,66 @@
89
* 解决方法:拉链式解决冲突法
910
* 工程实践
1011
* 缓存(LRU Cache)
11-
* 键值对存储(Redis)
12+
* 键值对存储(Redis)
13+
14+
## 树、二叉树、二叉搜索树的实现和特性
15+
### 树 Tree
16+
>LinkedList是特殊话的tree
17+
>Tree是特殊化的Graph
18+
* 代码实现
19+
```
20+
class TreeNode {
21+
contructor(val) {
22+
this.val = val
23+
this.left = null
24+
this.right = null
25+
}
26+
}
27+
```
28+
29+
* 二叉树的遍历
30+
1. 前序(Pre-order): 根-左-右
31+
2. 中序(In-order): 左-根-右
32+
3. 后序(Post-order): 左-右-根
33+
34+
### 二叉搜索树 Binary Search Tree
35+
* 定义
36+
二叉搜索树,也称二叉排序树、有序二叉树(Order Binary Tree)、排序二叉树(Sorted Binary Tree),是指一颗空树或者具有下列性质的二叉树:
37+
1. 左子树上**所有节点**的值均小于他的根节点的值
38+
2. 右子树上**所有节点**的值均大于他的根节点的值
39+
3. 以此类推:左右子树也分别为二叉查找树(重复性)
40+
*中序遍历:生序遍历*
41+
42+
* 常见操作
43+
1. 查询:O(logn)
44+
2. 插入新节点: O(logn)
45+
3. 删除:O(logn)
46+
47+
* 遍历
48+
```
49+
// 前序遍历
50+
let preOrderTraverse = (node, cb) {
51+
if (node) {
52+
cb(node.val)
53+
preOrderTraverse(node.left, cb)
54+
preOrderTraverse(node.right, cb)
55+
56+
}
57+
}
58+
// 中序遍历
59+
let inOrderTraverse = (node, cb) {
60+
if (node) {
61+
inOrderTraverse(node.left, cb)
62+
cb(node.val)
63+
inOrderTraverse(node.right, cb)
64+
}
65+
}
66+
// 后序遍历
67+
let postOrderTraverse = (node, cb) {
68+
if (node) {
69+
postOrderTraverse(node.left, cb)
70+
postOrderTraverse(node.right, cb)
71+
cb(node.val)
72+
}
73+
}
74+
```
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* 普通递归
3+
* Definition for a binary tree node.
4+
* function TreeNode(val) {
5+
* this.val = val;
6+
* this.left = this.right = null;
7+
* }
8+
*/
9+
/**
10+
* @param {TreeNode} root
11+
* @return {number[]}
12+
*/
13+
var inorderTraversal = function(root) {
14+
var nums = []
15+
let traversal = (node) => {
16+
if (node) {
17+
traversal(node.left)
18+
nums.push(node.val);
19+
traversal(node.right)
20+
}
21+
}
22+
traversal(root)
23+
return nums
24+
};

0 commit comments

Comments
 (0)