Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | import { v4 as uuidv4 } from 'uuid'; /** * A Node within the B+Tree */ export default class Node { /** * Node Type: Internal Node * Does not hold any data, just pointers to child nodes. * @type {number} */ static INTERNAL_NODE = 1; /** * Node Type: Leaf Node * Holds the data, has no child nodes. * @type {number} */ static LEAF_NODE = 2; /** * Node-Type (Internal Node, Leaf Node) * @type {number} */ type; /** * Number of used Elements in Node * @type {number} */ used; /** * Value-Array * size is 2*N * @type {number[]} */ values = []; /** * ChildNode-Array * size is 2*N+1 * @type {Node[]} */ children = []; /** * Previous Leaf-Pointer * @type {Node} */ previous; /** * Next Leaf-Pointer * @type {Node} */ next; /** * @type {String} */ id; /** * Constructor * @param {number} type Internal or Leaf Node * @param {number} N Order of the Tree */ constructor(type, N) { this.type = type; this.used = 0; this.values = new Array(2 * N); this.children = new Array(2 * N + 1); this.previous = undefined; this.next = undefined; this.id = `N${uuidv4()}`; } /** * Destructor * Delete all child nodes. * JS does not have destructors, so we have to implement and call them ourselves. */ destructor() { if (this.type === Node.INTERNAL_NODE) { for (let i = 0; i < this.used + 1; i += 1) { this.children[i].destructor(); delete this.children[i]; } } } } |