avl-tree-typed 1.19.45 → 1.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +192 -197
  2. package/package.json +2 -2
package/README.md CHANGED
@@ -1,179 +1,218 @@
1
1
  # What
2
-
3
2
  ## Brief
4
- Javascript & TypeScript Data Structure Library.
5
-
6
- Binary Tree, Binary Search Tree (BST), AVL Tree, Tree Multiset, Segment Tree, Binary Indexed Tree, Graph, Directed Graph, Undirected Graph, Linked List, Singly Linked List, Doubly Linked List, Queue, Object Deque, Array Deque, Stack, Hash, Coordinate Set, Coordinate Map, Heap, Priority Queue, Max Priority Queue, Min Priority Queue, Trie
7
-
8
- ## Algorithms list only a few out, you can discover more in API docs
3
+ This is a standalone AVL Tree data structure from the data-structure-typed collection. If you wish to access more data structures or advanced features, you can transition to directly installing the complete [data-structure-typed](https://www.npmjs.com/package/data-structure-typed) package
9
4
 
10
- DFS, DFSIterative, BFS, morris, Bellman-Ford Algorithm, Dijkstra's Algorithm, Floyd-Warshall Algorithm, Tarjan's Algorithm
11
-
12
- ## Code design
13
- By strictly adhering to object-oriented design (BinaryTree -> BST -> AVLTree -> TreeMultiset), you can seamlessly inherit the existing data structures to implement the customized ones you need. Object-oriented design stands as the optimal approach to data structure design.
14
5
 
15
6
  # How
16
7
 
17
8
  ## install
18
- ### yarn
19
-
9
+ ### npm
20
10
  ```bash
21
- yarn add data-structure-typed
11
+ npm i avl-tree-typed
22
12
  ```
23
-
24
- ### npm
25
-
13
+ ### yarn
26
14
  ```bash
27
- npm install data-structure-typed
15
+ yarn add avl-tree-typed
28
16
  ```
17
+ ### methods
18
+ ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/methods-8bit/avl-tree.png?raw=true)
29
19
 
30
- ### Binary Search Tree (BST) snippet
31
-
20
+ ### snippet
32
21
  #### TS
22
+
33
23
  ```typescript
34
- import {BST, BSTNode} from 'data-structure-typed';
35
-
36
- const bst = new BST();
37
- bst.add(11);
38
- bst.add(3);
39
- bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
40
- bst.size === 16; // true
41
- bst.has(6); // true
42
- const node6 = bst.get(6);
43
- bst.getHeight(6) === 2; // true
44
- bst.getHeight() === 5; // true
45
- bst.getDepth(6) === 3; // true
46
- const leftMost = bst.getLeftMost();
47
- leftMost?.id === 1; // true
48
- expect(leftMost?.id).toBe(1);
49
- bst.remove(6);
50
- bst.get(6); // null
51
- bst.isAVLBalanced(); // true or false
52
- const bfsIDs = bst.BFS();
53
- bfsIDs[0] === 11; // true
54
- expect(bfsIDs[0]).toBe(11);
55
-
56
- const objBST = new BST<BSTNode<{ id: number, keyA: number }>>();
57
- objBST.add(11, {id: 11, keyA: 11});
58
- objBST.add(3, {id: 3, keyA: 3});
59
-
60
- objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
61
- {id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
62
- {id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
63
- {id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
64
- {id: 10, keyA: 10}, {id: 5, keyA: 5}]);
65
-
66
- objBST.remove(11);
67
-
68
-
69
- const avlTree = new AVLTree();
70
- avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
71
- avlTree.isAVLBalanced(); // true
72
- avlTree.remove(10);
73
- avlTree.isAVLBalanced(); // true
24
+ import {AVLTree, AVLTreeNode} from 'data-structure-typed';
25
+ // /* or if you prefer */ import {AVLTree} from 'avl-tree-typed';
26
+
27
+ const avlTree = new AVLTree<AVLTreeNode<number>>();
28
+
29
+ const idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
30
+ avlTree.addMany(idsOrVals, idsOrVals);
31
+
32
+ const node6 = avlTree.get(6);
33
+ node6 && avlTree.getHeight(node6) // 3
34
+ node6 && avlTree.getDepth(node6) // 1
35
+ const getNodeById = avlTree.get(10, 'id');
36
+ getNodeById?.id // 10
37
+
38
+ const getMinNodeByRoot = avlTree.getLeftMost();
39
+ getMinNodeByRoot?.id // 1
40
+
41
+ const node15 = avlTree.get(15);
42
+ const getMinNodeBySpecificNode = node15 && avlTree.getLeftMost(node15);
43
+ getMinNodeBySpecificNode?.id // 12
74
44
 
45
+ const subTreeSum = node15 && avlTree.subTreeSum(node15);
46
+ subTreeSum // 70
47
+
48
+ const lesserSum = avlTree.lesserSum(10);
49
+ lesserSum // 45
50
+
51
+ const node11 = avlTree.get(11);
52
+ node11?.id // 11
53
+
54
+ const dfs = avlTree.DFS('in', 'node');
55
+ dfs[0].id // 1
56
+ avlTree.perfectlyBalance();
57
+ const bfs = avlTree.BFS('node');
58
+ avlTree.isPerfectlyBalanced() && bfs[0].id // 8
59
+
60
+ avlTree.remove(11, true)[0].deleted?.id // 11
61
+ avlTree.isAVLBalanced(); // true
62
+ node15 && avlTree.getHeight(node15) // 2
63
+ avlTree.remove(1, true)[0].deleted?.id // 1
64
+ avlTree.isAVLBalanced(); // true
65
+ avlTree.getHeight() // 4
66
+
67
+ avlTree.remove(4, true)[0].deleted?.id // 4
68
+ avlTree.isAVLBalanced(); // true
69
+ avlTree.getHeight() // 4
70
+
71
+ avlTree.remove(10, true)[0].deleted?.id // 10
72
+ avlTree.isAVLBalanced(); // true
73
+ avlTree.getHeight() // 3
74
+
75
+ avlTree.remove(15, true)[0].deleted?.id // 15
76
+ avlTree.isAVLBalanced(); // true
77
+ avlTree.getHeight() // 3
78
+
79
+ avlTree.remove(5, true)[0].deleted?.id // 5
80
+ avlTree.isAVLBalanced(); // true
81
+ avlTree.getHeight() // 3
82
+
83
+ avlTree.remove(13, true)[0].deleted?.id // 13
84
+ avlTree.isAVLBalanced(); // true
85
+ avlTree.getHeight() // 3
86
+
87
+ avlTree.remove(3, true)[0].deleted?.id // 3
88
+ avlTree.isAVLBalanced(); // true
89
+ avlTree.getHeight() // 3
90
+
91
+ avlTree.remove(8, true)[0].deleted?.id // 8
92
+ avlTree.isAVLBalanced(); // true
93
+ avlTree.getHeight() // 3
94
+
95
+ avlTree.remove(6, true)[0].deleted?.id // 6
96
+ avlTree.remove(6, true).length // 0
97
+ avlTree.isAVLBalanced(); // true
98
+ avlTree.getHeight() // 2
99
+
100
+ avlTree.remove(7, true)[0].deleted?.id // 7
101
+ avlTree.isAVLBalanced(); // true
102
+ avlTree.getHeight() // 2
103
+
104
+ avlTree.remove(9, true)[0].deleted?.id // 9
105
+ avlTree.isAVLBalanced(); // true
106
+ avlTree.getHeight() // 2
107
+
108
+ avlTree.remove(14, true)[0].deleted?.id // 14
109
+ avlTree.isAVLBalanced(); // true
110
+ avlTree.getHeight() // 1
111
+
112
+ avlTree.isAVLBalanced(); // true
113
+ const lastBFSIds = avlTree.BFS();
114
+ lastBFSIds[0] // 12
115
+
116
+ const lastBFSNodes = avlTree.BFS('node');
117
+ lastBFSNodes[0].id // 12
75
118
  ```
76
119
  #### JS
77
120
  ```javascript
78
- const {BST, BSTNode} = require('data-structure-typed');
79
-
80
- const bst = new BST();
81
- bst.add(11);
82
- bst.add(3);
83
- bst.addMany([15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5]);
84
- bst.size === 16; // true
85
- bst.has(6); // true
86
- const node6 = bst.get(6);
87
- bst.getHeight(6) === 2; // true
88
- bst.getHeight() === 5; // true
89
- bst.getDepth(6) === 3; // true
90
- const leftMost = bst.getLeftMost();
91
- leftMost?.id === 1; // true
92
- expect(leftMost?.id).toBe(1);
93
- bst.remove(6);
94
- bst.get(6); // null
95
- bst.isAVLBalanced(); // true or false
96
- const bfsIDs = bst.BFS();
97
- bfsIDs[0] === 11; // true
98
- expect(bfsIDs[0]).toBe(11);
99
-
100
- const objBST = new BST();
101
- objBST.add(11, {id: 11, keyA: 11});
102
- objBST.add(3, {id: 3, keyA: 3});
103
-
104
- objBST.addMany([{id: 15, keyA: 15}, {id: 1, keyA: 1}, {id: 8, keyA: 8},
105
- {id: 13, keyA: 13}, {id: 16, keyA: 16}, {id: 2, keyA: 2},
106
- {id: 6, keyA: 6}, {id: 9, keyA: 9}, {id: 12, keyA: 12},
107
- {id: 14, keyA: 14}, {id: 4, keyA: 4}, {id: 7, keyA: 7},
108
- {id: 10, keyA: 10}, {id: 5, keyA: 5}]);
109
-
110
- objBST.remove(11);
111
-
112
-
113
- const avlTree = new AVLTree();
114
- avlTree.addMany([11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5])
115
- avlTree.isAVLBalanced(); // true
116
- avlTree.remove(10);
117
- avlTree.isAVLBalanced(); // true
121
+ const {AVLTree} = require('data-structure-typed');
122
+ // /* or if you prefer */ const {AVLTree} = require('avl-tree-typed');
118
123
 
119
- ```
124
+ const avlTree = new AVLTree();
120
125
 
121
- ### Directed Graph simple snippet
126
+ const idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
127
+ avlTree.addMany(idsOrVals, idsOrVals);
122
128
 
123
- #### TS or JS
124
- ```typescript
125
- import {DirectedGraph} from 'data-structure-typed';
126
-
127
- const graph = new DirectedGraph();
128
-
129
- graph.addVertex('A');
130
- graph.addVertex('B');
131
-
132
- graph.hasVertex('A'); // true
133
- graph.hasVertex('B'); // true
134
- graph.hasVertex('C'); // false
135
-
136
- graph.addEdge('A', 'B');
137
- graph.hasEdge('A', 'B'); // true
138
- graph.hasEdge('B', 'A'); // false
139
-
140
- graph.removeEdgeSrcToDest('A', 'B');
141
- graph.hasEdge('A', 'B'); // false
142
-
143
- graph.addVertex('C');
144
-
145
- graph.addEdge('A', 'B');
146
- graph.addEdge('B', 'C');
147
-
148
- const topologicalOrderIds = graph.topologicalSort(); // ['A', 'B', 'C']
149
- ```
129
+ const node6 = avlTree.get(6);
130
+ node6 && avlTree.getHeight(node6) // 3
131
+ node6 && avlTree.getDepth(node6) // 1
132
+ const getNodeById = avlTree.get(10, 'id');
133
+ getNodeById?.id // 10
150
134
 
151
- ### Undirected Graph snippet
135
+ const getMinNodeByRoot = avlTree.getLeftMost();
136
+ getMinNodeByRoot?.id // 1
152
137
 
153
- #### TS or JS
154
- ```typescript
155
- import {UndirectedGraph} from 'data-structure-typed';
156
-
157
- const graph = new UndirectedGraph();
158
- graph.addVertex('A');
159
- graph.addVertex('B');
160
- graph.addVertex('C');
161
- graph.addVertex('D');
162
- graph.removeVertex('C');
163
- graph.addEdge('A', 'B');
164
- graph.addEdge('B', 'D');
165
-
166
- const dijkstraResult = graph.dijkstra('A');
167
- Array.from(dijkstraResult?.seen ?? []).map(vertex => vertex.id) // ['A', 'B', 'D']
168
- ```
138
+ const node15 = avlTree.get(15);
139
+ const getMinNodeBySpecificNode = node15 && avlTree.getLeftMost(node15);
140
+ getMinNodeBySpecificNode?.id // 12
141
+
142
+ const subTreeSum = node15 && avlTree.subTreeSum(node15);
143
+ subTreeSum // 70
144
+
145
+ const lesserSum = avlTree.lesserSum(10);
146
+ lesserSum // 45
147
+
148
+ const node11 = avlTree.get(11);
149
+ node11?.id // 11
150
+
151
+ const dfs = avlTree.DFS('in', 'node');
152
+ dfs[0].id // 1
153
+ avlTree.perfectlyBalance();
154
+ const bfs = avlTree.BFS('node');
155
+ avlTree.isPerfectlyBalanced() && bfs[0].id // 8
156
+
157
+ avlTree.remove(11, true)[0].deleted?.id // 11
158
+ avlTree.isAVLBalanced(); // true
159
+ node15 && avlTree.getHeight(node15) // 2
160
+ avlTree.remove(1, true)[0].deleted?.id // 1
161
+ avlTree.isAVLBalanced(); // true
162
+ avlTree.getHeight() // 4
169
163
 
170
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/dfs-pre-order.webp)
164
+ avlTree.remove(4, true)[0].deleted?.id // 4
165
+ avlTree.isAVLBalanced(); // true
166
+ avlTree.getHeight() // 4
171
167
 
172
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/test-graphs.webp)
168
+ avlTree.remove(10, true)[0].deleted?.id // 10
169
+ avlTree.isAVLBalanced(); // true
170
+ avlTree.getHeight() // 3
173
171
 
174
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/cut-off-trees-for-golf.webp)
172
+ avlTree.remove(15, true)[0].deleted?.id // 15
173
+ avlTree.isAVLBalanced(); // true
174
+ avlTree.getHeight() // 3
175
175
 
176
- ![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/examples/parenthesis-check.webp)
176
+ avlTree.remove(5, true)[0].deleted?.id // 5
177
+ avlTree.isAVLBalanced(); // true
178
+ avlTree.getHeight() // 3
179
+
180
+ avlTree.remove(13, true)[0].deleted?.id // 13
181
+ avlTree.isAVLBalanced(); // true
182
+ avlTree.getHeight() // 3
183
+
184
+ avlTree.remove(3, true)[0].deleted?.id // 3
185
+ avlTree.isAVLBalanced(); // true
186
+ avlTree.getHeight() // 3
187
+
188
+ avlTree.remove(8, true)[0].deleted?.id // 8
189
+ avlTree.isAVLBalanced(); // true
190
+ avlTree.getHeight() // 3
191
+
192
+ avlTree.remove(6, true)[0].deleted?.id // 6
193
+ avlTree.remove(6, true).length // 0
194
+ avlTree.isAVLBalanced(); // true
195
+ avlTree.getHeight() // 2
196
+
197
+ avlTree.remove(7, true)[0].deleted?.id // 7
198
+ avlTree.isAVLBalanced(); // true
199
+ avlTree.getHeight() // 2
200
+
201
+ avlTree.remove(9, true)[0].deleted?.id // 9
202
+ avlTree.isAVLBalanced(); // true
203
+ avlTree.getHeight() // 2
204
+
205
+ avlTree.remove(14, true)[0].deleted?.id // 14
206
+ avlTree.isAVLBalanced(); // true
207
+ avlTree.getHeight() // 1
208
+
209
+ avlTree.isAVLBalanced(); // true
210
+ const lastBFSIds = avlTree.BFS();
211
+ lastBFSIds[0] // 12
212
+
213
+ const lastBFSNodes = avlTree.BFS('node');
214
+ lastBFSNodes[0].id // 12
215
+ ```
177
216
 
178
217
 
179
218
  ## API docs & Examples
@@ -182,10 +221,6 @@ import {UndirectedGraph} from 'data-structure-typed';
182
221
 
183
222
  [Live Examples](https://data-structure-typed-examples.vercel.app)
184
223
 
185
- <a href="https://data-structure-typed-examples.vercel.app" target="_blank">Live Examples</a>
186
-
187
- [//]: # ([Examples Repository]&#40;https://github.com/zrwusa/data-structure-typed-examples&#41;)
188
-
189
224
  <a href="https://github.com/zrwusa/data-structure-typed-examples" target="_blank">Examples Repository</a>
190
225
 
191
226
  ## Data Structures
@@ -203,10 +238,10 @@ import {UndirectedGraph} from 'data-structure-typed';
203
238
  <tbody>
204
239
  <tr>
205
240
  <td>Binary Tree</td>
206
- <td><img src="https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg" alt="">
207
- </img></td>
208
- <td><img src="https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg" alt="">
209
- </img></td>
241
+ <td><img src="https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg" alt=""/>
242
+ </td>
243
+ <td><img src="https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg" alt=""/>
244
+ </td>
210
245
  <td><a href="https://data-structure-typed-docs.vercel.app/classes/BinaryTree.html"><span>Binary Tree</span></a></td>
211
246
  <td><img src="https://raw.githubusercontent.com/zrwusa/assets/master/images/data-structure-typed/assets/tick.svg" alt=""></td>
212
247
  </tr>
@@ -653,46 +688,6 @@ import {UndirectedGraph} from 'data-structure-typed';
653
688
 
654
689
  ![complexities of data structures](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/assets/data-structure-complexities.jpg)
655
690
 
656
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/bst-rotation.gif&#41;)
657
-
658
- [//]: # ()
659
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/binary-tree/avl-tree-inserting.gif&#41;)
660
-
661
- [//]: # ()
662
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan.webp&#41;)
663
-
664
- [//]: # ()
665
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list.jpg&#41;)
666
-
667
- [//]: # ()
668
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-list-pros-cons.jpg&#41;)
669
-
670
- [//]: # ()
671
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix.jpg&#41;)
672
-
673
- [//]: # ()
674
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/adjacency-matrix-pros-cons.jpg&#41;)
675
-
676
- [//]: # ()
677
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/dfs-can-do.jpg&#41;)
678
-
679
- [//]: # ()
680
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list.jpg&#41;)
681
-
682
- [//]: # ()
683
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/edge-list-pros-cons.jpg&#41;)
684
-
685
- [//]: # ()
686
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/max-flow.jpg&#41;)
687
-
688
- [//]: # ()
689
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/mst.jpg&#41;)
690
-
691
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan-articulation-point-bridge.png&#41;)
692
-
693
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan-complicate-simple.png&#41;)
694
-
695
- [//]: # (![]&#40;https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/graph/tarjan-strongly-connected-component.png&#41;)
696
691
 
697
692
 
698
693
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "avl-tree-typed",
3
- "version": "1.19.45",
3
+ "version": "1.21.0",
4
4
  "description": "AVLTree(Adelson-Velsky and Landis Tree). Javascript & Typescript Data Structure.",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
@@ -53,7 +53,7 @@
53
53
  "typescript": "^4.9.5"
54
54
  },
55
55
  "dependencies": {
56
- "data-structure-typed": "^1.19.4",
56
+ "data-structure-typed": "^1.21.0",
57
57
  "zod": "^3.22.2"
58
58
  }
59
59
  }