Skip to content

Commit 252d414

Browse files
author
宋子龙
committed
graph 初步概念行程
1 parent bcdc54d commit 252d414

File tree

4 files changed

+91
-4
lines changed

4 files changed

+91
-4
lines changed

.DS_Store

-2 KB
Binary file not shown.

BinarySearchTree/binarySearchTree.html

+3-3
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
* @api private
6565
*/
6666
function inOrderTraverseNode(node, callback) {
67-
if (node !== null) {
67+
if (node) {
6868
inOrderTraverseNode(node.left, callback);
6969
callback(node.key);
7070
inOrderTraverseNode(node.right, callback);
@@ -80,7 +80,7 @@
8080
preOrderTraverseNode(this[root], callback);
8181

8282
function preOrderTraverseNode(node, callback) {
83-
if (node !== null) {
83+
if (node) {
8484
callback(node.key);
8585
preOrderTraverseNode(node.left, callback);
8686
preOrderTraverseNode(node.right, callback);
@@ -95,7 +95,7 @@
9595
postOrderTraverseNode(this[root], callback);
9696

9797
function postOrderTraverseNode(node, callback) {
98-
if (node !== null) {
98+
if (node) {
9999
postOrderTraverseNode(node.left, callback);
100100
postOrderTraverseNode(node.right, callback);
101101
callback(node.key);

graph/graph.html

+74
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,78 @@
1111
</html>
1212
<script type="text/javascript">
1313
const log = console.log
14+
15+
const vertics = Symbol('vertics');
16+
const adjoinList = Symbol('adjoinList');
17+
18+
/** 以 邻接表 的形式,表示 Graph 关系*/
19+
class Graph {
20+
constructor() {
21+
22+
// 存储 vertex
23+
this[vertics] = [];
24+
25+
// 存储 邻接表
26+
this[adjoinList] = new Map();
27+
}
28+
29+
/**
30+
* @param v vertex
31+
*/
32+
addVertex(v) {
33+
this[vertics].push(v);
34+
this[adjoinList].set(v, [])
35+
}
36+
37+
/**
38+
* @param v vertex
39+
* @param w vertex
40+
*/
41+
addEdge(v, w) {
42+
43+
// 实现 有向图
44+
this[adjoinList].get(v).push(w);
45+
46+
// 实现 无向图
47+
this[adjoinList].get(w).push(v);
48+
}
49+
50+
/** 字符串输出 邻接表*/
51+
toString() {
52+
let s = '';
53+
for (const vertex of this[vertics]) {
54+
s += vertex + ' -> ';
55+
const neighbors = this[adjoinList].get(vertex);
56+
for (const neighbor of neighbors) {
57+
s += neighbor + ' ';
58+
}
59+
s += '\n';
60+
}
61+
return s;
62+
}
63+
64+
65+
66+
}
67+
68+
69+
const graph = new Graph();
70+
const myVertices = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'];
71+
72+
for (let vertex of myVertices) {
73+
graph.addVertex(vertex)
74+
}
75+
76+
graph.addEdge('A', 'B');
77+
graph.addEdge('A', 'C');
78+
graph.addEdge('A', 'D');
79+
graph.addEdge('C', 'D');
80+
graph.addEdge('C', 'G');
81+
graph.addEdge('D', 'G');
82+
graph.addEdge('D', 'H');
83+
graph.addEdge('B', 'E');
84+
graph.addEdge('B', 'F');
85+
graph.addEdge('E', 'I');
86+
87+
log(graph.toString())
1488
</script>

graph/note.md

+14-1
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,17 @@
3636
D: [C, E],
3737
E: [D] }
3838

39-
关联矩阵:矩阵的行表示 vertex,列表示 edge。 通常用于 edge 的数量多于 vertex 的情况下,以节省内存。
39+
关联矩阵:矩阵的行表示 vertex,列表示 edge。 通常用于 edge 的数量多于 vertex 的情况下,以节省内存。
40+
41+
## 图的遍历:
42+
43+
作用:寻找特定顶点;寻找两顶点间的路径;检查图是否连通;检查图是否含有环;等。
44+
45+
思想:
46+
1)追踪每个第一次访问的节点,并追踪有哪些节点还未被完全探索。BFS或DFS都需先指出第一个被访问的 vertex。
47+
2)要完全探索一个顶点,应查看该顶点的每一条边,若边有连接到未被访问过的顶点,需将该顶点标注为 被发现的,并将其加入待访问顶点列表中。
48+
3)为保证效率,需控制访问每个顶点至多两次。
49+
50+
广度优先(Breadth-First Search, BFS):将顶点存入 队列 中。
51+
52+
深度优先(Depth-First Search, DFS):将顶点存入 栈 中。

0 commit comments

Comments
 (0)