![npm](https://img.shields.io/npm/v/red-black-tree-typed)
What
Brief
This is a standalone Red Black 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 package
How
install
npm
npm i red-black-tree-typed --save
yarn
yarn add red-black-tree-typed
methods
![](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/methods-8bit/red-black-tree.png?raw=true)
snippet
TS
import {RedBlackTree, RedBlackTreeNode} from 'data-structure-typed';
const rbTree = new RedBlackTree<RedBlackTreeNode<number>>();
const idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
rbTree.addMany(idsOrVals, idsOrVals);
const node6 = rbTree.get(6);
node6 && rbTree.getHeight(node6)
node6 && rbTree.getDepth(node6)
const getNodeById = rbTree.get(10, 'id');
getNodeById?.id
const getMinNodeByRoot = rbTree.getLeftMost();
getMinNodeByRoot?.id
const node15 = rbTree.get(15);
const getMinNodeBySpecificNode = node15 && rbTree.getLeftMost(node15);
getMinNodeBySpecificNode?.id
const subTreeSum = node15 && rbTree.subTreeSum(node15);
subTreeSum
const lesserSum = rbTree.lesserSum(10);
lesserSum
const node11 = rbTree.get(11);
node11?.id
const dfs = rbTree.dfs('in', 'node');
dfs[0].id
rbTree.perfectlyBalance();
const bfs = rbTree.bfs('node');
rbTree.isPerfectlyBalanced() && bfs[0].id
rbTree.delete(11, true)[0].deleted?.id
rbTree.isAVLBalanced();
node15 && rbTree.getHeight(node15)
rbTree.delete(1, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(4, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(10, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(15, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(5, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(13, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(3, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(8, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(6, true)[0].deleted?.id
rbTree.delete(6, true).length
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(7, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(9, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(14, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.isAVLBalanced();
const lastBFSIds = rbTree.BFS();
lastBFSIds[0]
const lastBFSNodes = rbTree.BFS('node');
lastBFSNodes[0].id
JS
const {RedBlackTree} = require('data-structure-typed');
const rbTree = new RedBlackTree();
const idsOrVals = [11, 3, 15, 1, 8, 13, 16, 2, 6, 9, 12, 14, 4, 7, 10, 5];
rbTree.addMany(idsOrVals, idsOrVals);
const node6 = rbTree.get(6);
node6 && rbTree.getHeight(node6)
node6 && rbTree.getDepth(node6)
const getNodeById = rbTree.get(10, 'id');
getNodeById?.id
const getMinNodeByRoot = rbTree.getLeftMost();
getMinNodeByRoot?.id
const node15 = rbTree.get(15);
const getMinNodeBySpecificNode = node15 && rbTree.getLeftMost(node15);
getMinNodeBySpecificNode?.id
const subTreeSum = node15 && rbTree.subTreeSum(node15);
subTreeSum
const lesserSum = rbTree.lesserSum(10);
lesserSum
const node11 = rbTree.get(11);
node11?.id
const dfs = rbTree.DFS('in', 'node');
dfs[0].id
rbTree.perfectlyBalance();
const bfs = rbTree.BFS('node');
rbTree.isPerfectlyBalanced() && bfs[0].id
rbTree.delete(11, true)[0].deleted?.id
rbTree.isAVLBalanced();
node15 && rbTree.getHeight(node15)
rbTree.delete(1, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(4, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(10, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(15, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(5, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(13, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(3, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(8, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(6, true)[0].deleted?.id
rbTree.delete(6, true).length
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(7, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(9, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.delete(14, true)[0].deleted?.id
rbTree.isAVLBalanced();
rbTree.getHeight()
rbTree.isAVLBalanced();
const lastBFSIds = rbTree.BFS();
lastBFSIds[0]
const lastBFSNodes = rbTree.BFS('node');
lastBFSNodes[0].id
API docs & Examples
API Docs
Live Examples
Examples Repository
Data Structures
Why
Complexities
performance of Big O
Big O Notation | Type | Computations for 10 elements | Computations for 100 elements | Computations for 1000 elements |
---|
O(1) | Constant | 1 | 1 | 1 |
O(log N) | Logarithmic | 3 | 6 | 9 |
O(N) | Linear | 10 | 100 | 1000 |
O(N log N) | n log(n) | 30 | 600 | 9000 |
O(N^2) | Quadratic | 100 | 10000 | 1000000 |
O(2^N) | Exponential | 1024 | 1.26e+29 | 1.07e+301 |
O(N!) | Factorial | 3628800 | 9.3e+157 | 4.02e+2567 |
Data Structure Complexity
Data Structure | Access | Search | Insertion | Deletion | Comments |
---|
Array | 1 | n | n | n | |
Stack | n | n | 1 | 1 | |
Queue | n | n | 1 | 1 | |
Linked List | n | n | 1 | n | |
Hash Table | - | n | n | n | In case of perfect hash function costs would be O(1) |
Binary Search Tree | n | n | n | n | In case of balanced tree costs would be O(log(n)) |
B-Tree | log(n) | log(n) | log(n) | log(n) | |
Red-Black Tree | log(n) | log(n) | log(n) | log(n) | |
Red Black Tree | log(n) | log(n) | log(n) | log(n) | |
Bloom Filter | - | 1 | 1 | - | False positives are possible while searching |
Sorting Complexity
Name | Best | Average | Worst | Memory | Stable | Comments |
---|
Bubble sort | n | n2 | n2 | 1 | Yes | |
Insertion sort | n | n2 | n2 | 1 | Yes | |
Selection sort | n2 | n2 | n2 | 1 | No | |
Heap sort | n log(n) | n log(n) | n log(n) | 1 | No | |
Merge sort | n log(n) | n log(n) | n log(n) | n | Yes | |
Quick sort | n log(n) | n log(n) | n2 | log(n) | No | Quicksort is usually done in-place with O(log(n)) stack space |
Shell sort | n log(n) | depends on gap sequence | n (log(n))2 | 1 | No | |
Counting sort | n + r | n + r | n + r | n + r | Yes | r - biggest number in array |
Radix sort | n * k | n * k | n * k | n + k | Yes | k - length of longest key |
![overview diagram](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/assets/overview-diagram-of-data-structures.png)
![complexities](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/assets/complexities-diff.jpg)
![complexities of data structures](https://github.com/zrwusa/assets/blob/master/images/data-structure-typed/assets/data-structure-complexities.jpg)