data-structure-typed 1.53.9 → 1.54.1
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.
- package/CHANGELOG.md +1 -1
- package/README.md +1 -0
- package/benchmark/report.html +1 -28
- package/benchmark/report.json +17 -326
- package/dist/{mjs/data-structures/binary-tree/avl-tree-multi-map.d.ts → cjs/data-structures/binary-tree/avl-tree-counter.d.ts} +54 -59
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +408 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +71 -189
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +133 -357
- package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +108 -78
- package/dist/cjs/data-structures/binary-tree/avl-tree.js +126 -79
- package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.d.ts +3 -0
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js +3 -0
- package/dist/cjs/data-structures/binary-tree/binary-indexed-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +243 -190
- package/dist/cjs/data-structures/binary-tree/binary-tree.js +273 -229
- package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/bst.d.ts +141 -122
- package/dist/cjs/data-structures/binary-tree/bst.js +170 -134
- package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/index.d.ts +2 -0
- package/dist/cjs/data-structures/binary-tree/index.js +2 -0
- package/dist/cjs/data-structures/binary-tree/index.js.map +1 -1
- package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +84 -80
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js +101 -79
- package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
- package/dist/{mjs/data-structures/binary-tree/tree-multi-map.d.ts → cjs/data-structures/binary-tree/tree-counter.d.ts} +54 -56
- package/dist/cjs/data-structures/binary-tree/tree-counter.js +445 -0
- package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -0
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +78 -186
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +140 -388
- package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
- package/dist/cjs/data-structures/graph/directed-graph.d.ts +3 -0
- package/dist/cjs/data-structures/graph/directed-graph.js +3 -0
- package/dist/cjs/data-structures/graph/directed-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/map-graph.d.ts +3 -0
- package/dist/cjs/data-structures/graph/map-graph.js +3 -0
- package/dist/cjs/data-structures/graph/map-graph.js.map +1 -1
- package/dist/cjs/data-structures/graph/undirected-graph.d.ts +3 -0
- package/dist/cjs/data-structures/graph/undirected-graph.js +3 -0
- package/dist/cjs/data-structures/graph/undirected-graph.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/singly-linked-list.d.ts +3 -0
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js +3 -0
- package/dist/cjs/data-structures/linked-list/singly-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/linked-list/skip-linked-list.d.ts +3 -0
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js +3 -0
- package/dist/cjs/data-structures/linked-list/skip-linked-list.js.map +1 -1
- package/dist/cjs/data-structures/matrix/matrix.d.ts +3 -0
- package/dist/cjs/data-structures/matrix/matrix.js +3 -0
- package/dist/cjs/data-structures/matrix/matrix.js.map +1 -1
- package/dist/cjs/data-structures/matrix/navigator.d.ts +3 -0
- package/dist/cjs/data-structures/matrix/navigator.js +3 -0
- package/dist/cjs/data-structures/matrix/navigator.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.d.ts +3 -0
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js +3 -0
- package/dist/cjs/data-structures/priority-queue/max-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.d.ts +3 -0
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js +3 -0
- package/dist/cjs/data-structures/priority-queue/min-priority-queue.js.map +1 -1
- package/dist/cjs/data-structures/trie/trie.d.ts +0 -4
- package/dist/cjs/data-structures/trie/trie.js +0 -4
- package/dist/cjs/data-structures/trie/trie.js.map +1 -1
- package/dist/cjs/interfaces/binary-tree.d.ts +7 -6
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -0
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.js +3 -0
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
- package/dist/cjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +1 -3
- package/dist/cjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -2
- package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
- package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +3 -2
- package/dist/cjs/types/data-structures/binary-tree/index.d.ts +2 -0
- package/dist/cjs/types/data-structures/binary-tree/index.js +2 -0
- package/dist/cjs/types/data-structures/binary-tree/index.js.map +1 -1
- package/dist/cjs/types/data-structures/binary-tree/rb-tree.d.ts +1 -3
- package/dist/cjs/types/data-structures/binary-tree/tree-counter.d.ts +2 -0
- package/dist/cjs/types/data-structures/binary-tree/tree-counter.js +3 -0
- package/dist/cjs/types/data-structures/binary-tree/tree-counter.js.map +1 -0
- package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -3
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +213 -0
- package/dist/{mjs/data-structures/binary-tree/avl-tree-multi-map.js → esm/data-structures/binary-tree/avl-tree-counter.js} +72 -78
- package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +100 -0
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +191 -0
- package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -0
- package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +234 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/avl-tree.js +126 -80
- package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/binary-indexed-tree.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/binary-indexed-tree.js +3 -0
- package/dist/esm/data-structures/binary-tree/binary-indexed-tree.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/binary-tree.d.ts +243 -190
- package/dist/{mjs → esm}/data-structures/binary-tree/binary-tree.js +276 -234
- package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/bst.d.ts +141 -122
- package/dist/{mjs → esm}/data-structures/binary-tree/bst.js +171 -140
- package/dist/esm/data-structures/binary-tree/bst.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/index.d.ts +2 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/index.js +2 -0
- package/dist/{mjs → esm}/data-structures/binary-tree/index.js.map +1 -1
- package/dist/{mjs → esm}/data-structures/binary-tree/red-black-tree.d.ts +84 -80
- package/dist/{mjs → esm}/data-structures/binary-tree/red-black-tree.js +100 -79
- package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -0
- package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +212 -0
- package/dist/{mjs/data-structures/binary-tree/tree-multi-map.js → esm/data-structures/binary-tree/tree-counter.js} +88 -86
- package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -0
- package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +106 -0
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js +196 -0
- package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/graph/directed-graph.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/graph/directed-graph.js +3 -0
- package/dist/esm/data-structures/graph/directed-graph.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/graph/map-graph.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/graph/map-graph.js +3 -0
- package/dist/esm/data-structures/graph/map-graph.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/graph/undirected-graph.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/graph/undirected-graph.js +3 -0
- package/dist/esm/data-structures/graph/undirected-graph.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/linked-list/singly-linked-list.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/linked-list/singly-linked-list.js +3 -0
- package/dist/esm/data-structures/linked-list/singly-linked-list.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/linked-list/skip-linked-list.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/linked-list/skip-linked-list.js +3 -0
- package/dist/esm/data-structures/linked-list/skip-linked-list.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/matrix/matrix.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/matrix/matrix.js +3 -0
- package/dist/esm/data-structures/matrix/matrix.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/matrix/navigator.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/matrix/navigator.js +3 -0
- package/dist/esm/data-structures/matrix/navigator.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/priority-queue/max-priority-queue.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/priority-queue/max-priority-queue.js +3 -0
- package/dist/esm/data-structures/priority-queue/max-priority-queue.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/priority-queue/min-priority-queue.d.ts +3 -0
- package/dist/{mjs → esm}/data-structures/priority-queue/min-priority-queue.js +3 -0
- package/dist/esm/data-structures/priority-queue/min-priority-queue.js.map +1 -0
- package/dist/{mjs → esm}/data-structures/trie/trie.d.ts +0 -4
- package/dist/{mjs → esm}/data-structures/trie/trie.js +0 -4
- package/dist/esm/data-structures/trie/trie.js.map +1 -0
- package/dist/esm/interfaces/binary-tree.d.ts +9 -0
- package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.d.ts +2 -0
- package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.js +2 -0
- package/dist/esm/types/data-structures/binary-tree/avl-tree-counter.js.map +1 -0
- package/dist/esm/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +2 -0
- package/dist/esm/types/data-structures/binary-tree/avl-tree.d.ts +2 -0
- package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.d.ts +0 -2
- package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.d.ts +3 -2
- package/dist/{mjs → esm}/types/data-structures/binary-tree/index.d.ts +2 -0
- package/dist/{mjs → esm}/types/data-structures/binary-tree/index.js +2 -0
- package/dist/{mjs → esm}/types/data-structures/binary-tree/index.js.map +1 -1
- package/dist/esm/types/data-structures/binary-tree/rb-tree.d.ts +3 -0
- package/dist/esm/types/data-structures/binary-tree/tree-counter.d.ts +2 -0
- package/dist/esm/types/data-structures/binary-tree/tree-counter.js +2 -0
- package/dist/esm/types/data-structures/binary-tree/tree-counter.js.map +1 -0
- package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +2 -0
- package/dist/umd/data-structure-typed.js +1407 -913
- package/dist/umd/data-structure-typed.min.js +5 -5
- package/dist/umd/data-structure-typed.min.js.map +1 -1
- package/package.json +14 -14
- package/src/data-structures/binary-tree/avl-tree-counter.ts +463 -0
- package/src/data-structures/binary-tree/avl-tree-multi-map.ts +148 -394
- package/src/data-structures/binary-tree/avl-tree.ts +152 -112
- package/src/data-structures/binary-tree/binary-indexed-tree.ts +3 -0
- package/src/data-structures/binary-tree/binary-tree.ts +446 -379
- package/src/data-structures/binary-tree/bst.ts +224 -201
- package/src/data-structures/binary-tree/index.ts +2 -0
- package/src/data-structures/binary-tree/red-black-tree.ts +138 -114
- package/src/data-structures/binary-tree/tree-counter.ts +504 -0
- package/src/data-structures/binary-tree/tree-multi-map.ts +156 -428
- package/src/data-structures/graph/directed-graph.ts +3 -0
- package/src/data-structures/graph/map-graph.ts +3 -0
- package/src/data-structures/graph/undirected-graph.ts +3 -0
- package/src/data-structures/linked-list/singly-linked-list.ts +3 -0
- package/src/data-structures/linked-list/skip-linked-list.ts +3 -0
- package/src/data-structures/matrix/matrix.ts +3 -0
- package/src/data-structures/matrix/navigator.ts +3 -0
- package/src/data-structures/priority-queue/max-priority-queue.ts +3 -0
- package/src/data-structures/priority-queue/min-priority-queue.ts +3 -0
- package/src/data-structures/trie/trie.ts +0 -4
- package/src/interfaces/binary-tree.ts +10 -11
- package/src/types/data-structures/binary-tree/avl-tree-counter.ts +3 -0
- package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +1 -4
- package/src/types/data-structures/binary-tree/avl-tree.ts +0 -3
- package/src/types/data-structures/binary-tree/binary-tree.ts +0 -5
- package/src/types/data-structures/binary-tree/bst.ts +5 -3
- package/src/types/data-structures/binary-tree/index.ts +2 -0
- package/src/types/data-structures/binary-tree/rb-tree.ts +1 -4
- package/src/types/data-structures/binary-tree/tree-counter.ts +3 -0
- package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -4
- package/test/integration/all-in-one.test.ts +1 -1
- package/test/integration/avl-tree.test.ts +1 -1
- package/test/integration/bst.test.ts +2 -2
- package/test/integration/compile.js +144 -0
- package/test/integration/compile.ts +171 -0
- package/test/integration/index.html +48 -48
- package/test/performance/data-structures/binary-tree/avl-tree.test.ts +4 -4
- package/test/performance/data-structures/binary-tree/rb-tree.test.ts +5 -4
- package/test/performance/data-structures/comparison/comparison.test.ts +2 -2
- package/test/performance/reportor.ts +5 -3
- package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +877 -0
- package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +459 -761
- package/test/unit/data-structures/binary-tree/avl-tree.test.ts +223 -223
- package/test/unit/data-structures/binary-tree/binary-tree.test.ts +474 -492
- package/test/unit/data-structures/binary-tree/bst.test.ts +1 -1
- package/test/unit/data-structures/binary-tree/overall.test.ts +0 -3
- package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +87 -90
- package/test/unit/data-structures/binary-tree/tree-counter.test.ts +975 -0
- package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +729 -857
- package/test/unit/data-structures/hash/hash-map.test.ts +1 -1
- package/{tsconfig-mjs.json → tsconfig-esm.json} +1 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree-multi-map.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/avl-tree.d.ts +0 -204
- package/dist/mjs/data-structures/binary-tree/avl-tree.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/binary-indexed-tree.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/binary-tree.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/bst.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/red-black-tree.js.map +0 -1
- package/dist/mjs/data-structures/binary-tree/tree-multi-map.js.map +0 -1
- package/dist/mjs/data-structures/graph/directed-graph.js.map +0 -1
- package/dist/mjs/data-structures/graph/map-graph.js.map +0 -1
- package/dist/mjs/data-structures/graph/undirected-graph.js.map +0 -1
- package/dist/mjs/data-structures/linked-list/singly-linked-list.js.map +0 -1
- package/dist/mjs/data-structures/linked-list/skip-linked-list.js.map +0 -1
- package/dist/mjs/data-structures/matrix/matrix.js.map +0 -1
- package/dist/mjs/data-structures/matrix/navigator.js.map +0 -1
- package/dist/mjs/data-structures/priority-queue/max-priority-queue.js.map +0 -1
- package/dist/mjs/data-structures/priority-queue/min-priority-queue.js.map +0 -1
- package/dist/mjs/data-structures/trie/trie.js.map +0 -1
- package/dist/mjs/interfaces/binary-tree.d.ts +0 -8
- package/dist/mjs/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +0 -4
- package/dist/mjs/types/data-structures/binary-tree/avl-tree.d.ts +0 -4
- package/dist/mjs/types/data-structures/binary-tree/rb-tree.d.ts +0 -5
- package/dist/mjs/types/data-structures/binary-tree/tree-multi-map.d.ts +0 -4
- /package/dist/{mjs → esm}/common/index.d.ts +0 -0
- /package/dist/{mjs → esm}/common/index.js +0 -0
- /package/dist/{mjs → esm}/common/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/base/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/base/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/base/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.js +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-element-base.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.js +0 -0
- /package/dist/{mjs → esm}/data-structures/base/iterable-entry-base.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.js +0 -0
- /package/dist/{mjs → esm}/data-structures/binary-tree/segment-tree.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.js +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/abstract-graph.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/graph/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/hash-map.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/hash-map.js +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/hash-map.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/hash/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/heap.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/heap.js +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/heap.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/max-heap.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/max-heap.js +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/max-heap.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/min-heap.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/min-heap.js +0 -0
- /package/dist/{mjs → esm}/data-structures/heap/min-heap.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.js +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/doubly-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/linked-list/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/matrix/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/matrix/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/matrix/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.js +0 -0
- /package/dist/{mjs → esm}/data-structures/priority-queue/priority-queue.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/deque.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/deque.js +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/deque.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/queue.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/queue.js +0 -0
- /package/dist/{mjs → esm}/data-structures/queue/queue.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/stack.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/stack.js +0 -0
- /package/dist/{mjs → esm}/data-structures/stack/stack.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/index.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/tree.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/tree.js +0 -0
- /package/dist/{mjs → esm}/data-structures/tree/tree.js.map +0 -0
- /package/dist/{mjs → esm}/data-structures/trie/index.d.ts +0 -0
- /package/dist/{mjs → esm}/data-structures/trie/index.js +0 -0
- /package/dist/{mjs → esm}/data-structures/trie/index.js.map +0 -0
- /package/dist/{mjs → esm}/index.d.ts +0 -0
- /package/dist/{mjs → esm}/index.js +0 -0
- /package/dist/{mjs → esm}/index.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/binary-tree.js +0 -0
- /package/dist/{mjs → esm}/interfaces/binary-tree.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/doubly-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/doubly-linked-list.js +0 -0
- /package/dist/{mjs → esm}/interfaces/doubly-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/graph.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/graph.js +0 -0
- /package/dist/{mjs → esm}/interfaces/graph.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/heap.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/heap.js +0 -0
- /package/dist/{mjs → esm}/interfaces/heap.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/index.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/index.js +0 -0
- /package/dist/{mjs → esm}/interfaces/index.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/navigator.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/navigator.js +0 -0
- /package/dist/{mjs → esm}/interfaces/navigator.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/priority-queue.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/priority-queue.js +0 -0
- /package/dist/{mjs → esm}/interfaces/priority-queue.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/segment-tree.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/segment-tree.js +0 -0
- /package/dist/{mjs → esm}/interfaces/segment-tree.js.map +0 -0
- /package/dist/{mjs → esm}/interfaces/singly-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/interfaces/singly-linked-list.js +0 -0
- /package/dist/{mjs → esm}/interfaces/singly-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/types/common.d.ts +0 -0
- /package/dist/{mjs → esm}/types/common.js +0 -0
- /package/dist/{mjs → esm}/types/common.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/base.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/base.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/base.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/base/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree-multi-map.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree-multi-map.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/avl-tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-indexed-tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/binary-tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/bst.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/rb-tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/rb-tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/segment-tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/tree-multi-map.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/binary-tree/tree-multi-map.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/abstract-graph.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/directed-graph.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/map-graph.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/graph/undirected-graph.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/hash-map.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/hash/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/heap.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/heap.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/heap.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/max-heap.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/heap/min-heap.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/doubly-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/singly-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/linked-list/skip-linked-list.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/matrix.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/matrix/navigator.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/max-priority-queue.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/min-priority-queue.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/priority-queue/priority-queue.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/deque.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/deque.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/deque.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/queue.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/queue.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/queue/queue.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/stack.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/stack.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/stack/stack.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/tree.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/tree.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/tree/tree.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/index.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/trie.d.ts +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/trie.js +0 -0
- /package/dist/{mjs → esm}/types/data-structures/trie/trie.js.map +0 -0
- /package/dist/{mjs → esm}/types/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/index.js +0 -0
- /package/dist/{mjs → esm}/types/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/utils/index.d.ts +0 -0
- /package/dist/{mjs → esm}/types/utils/index.js +0 -0
- /package/dist/{mjs → esm}/types/utils/index.js.map +0 -0
- /package/dist/{mjs → esm}/types/utils/utils.d.ts +0 -0
- /package/dist/{mjs → esm}/types/utils/utils.js +0 -0
- /package/dist/{mjs → esm}/types/utils/utils.js.map +0 -0
- /package/dist/{mjs → esm}/types/utils/validate-type.d.ts +0 -0
- /package/dist/{mjs → esm}/types/utils/validate-type.js +0 -0
- /package/dist/{mjs → esm}/types/utils/validate-type.js.map +0 -0
- /package/dist/{mjs → esm}/utils/index.d.ts +0 -0
- /package/dist/{mjs → esm}/utils/index.js +0 -0
- /package/dist/{mjs → esm}/utils/index.js.map +0 -0
- /package/dist/{mjs → esm}/utils/number.d.ts +0 -0
- /package/dist/{mjs → esm}/utils/number.js +0 -0
- /package/dist/{mjs → esm}/utils/number.js.map +0 -0
- /package/dist/{mjs → esm}/utils/utils.d.ts +0 -0
- /package/dist/{mjs → esm}/utils/utils.js +0 -0
- /package/dist/{mjs → esm}/utils/utils.js.map +0 -0
|
@@ -90,10 +90,10 @@ describe('BinaryTreeNode', () => {
|
|
|
90
90
|
|
|
91
91
|
describe('BinaryTree addMany', () => {
|
|
92
92
|
it('should addMany', () => {
|
|
93
|
-
const
|
|
93
|
+
const binTree = new BinaryTree<number, number, { id: number; name: number }>([], {
|
|
94
94
|
toEntryFn: ({ id, name }) => [id, name]
|
|
95
95
|
});
|
|
96
|
-
|
|
96
|
+
binTree.addMany(
|
|
97
97
|
[
|
|
98
98
|
{ id: 1, name: 1 },
|
|
99
99
|
{ id: 2, name: 2 },
|
|
@@ -102,10 +102,10 @@ describe('BinaryTree addMany', () => {
|
|
|
102
102
|
],
|
|
103
103
|
[undefined, 22, 44, 33]
|
|
104
104
|
);
|
|
105
|
-
expect(
|
|
106
|
-
expect(
|
|
107
|
-
expect(
|
|
108
|
-
expect(
|
|
105
|
+
expect(binTree.get(2)).toBe(22);
|
|
106
|
+
expect(binTree.get(binTree.getNode(3))).toBe(33);
|
|
107
|
+
expect(binTree.get(binTree.getNode(4))).toBe(44);
|
|
108
|
+
expect(binTree.get(binTree.getNode(1))).toBe(1);
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
it('should addMany undefined and null', () => {
|
|
@@ -123,7 +123,9 @@ describe('BinaryTree addMany', () => {
|
|
|
123
123
|
]);
|
|
124
124
|
expect(addManyEntriesWithNull).toEqual([true, true, true, true]);
|
|
125
125
|
expect(binaryTree.get(null)).toBe(undefined);
|
|
126
|
-
expect(binaryTree.getNode(null)).toBe(
|
|
126
|
+
expect(binaryTree.getNode(null)).toBe(undefined);
|
|
127
|
+
// // TODO should be null instead of undefined
|
|
128
|
+
// expect(binaryTree.getNode(null)).toBe(null);
|
|
127
129
|
const node0 = binaryTree.add(0, '0');
|
|
128
130
|
expect(node0).toBe(true);
|
|
129
131
|
expect(binaryTree.get(0)).toBe('0');
|
|
@@ -131,83 +133,83 @@ describe('BinaryTree addMany', () => {
|
|
|
131
133
|
});
|
|
132
134
|
|
|
133
135
|
describe('BinaryTree', () => {
|
|
134
|
-
let
|
|
136
|
+
let binTree: BinaryTree<number>;
|
|
135
137
|
|
|
136
138
|
beforeEach(() => {
|
|
137
|
-
|
|
139
|
+
binTree = new BinaryTree<number>();
|
|
138
140
|
});
|
|
139
141
|
|
|
140
142
|
afterEach(() => {
|
|
141
|
-
|
|
143
|
+
binTree.clear();
|
|
142
144
|
});
|
|
143
145
|
|
|
144
146
|
it('should add a node', () => {
|
|
145
|
-
const node =
|
|
147
|
+
const node = binTree.add(1);
|
|
146
148
|
expect(node).not.toBeNull();
|
|
147
|
-
expect(
|
|
149
|
+
expect(binTree.size).toBe(1);
|
|
148
150
|
});
|
|
149
151
|
|
|
150
152
|
it('should delete nodes', () => {
|
|
151
|
-
expect(
|
|
152
|
-
expect(
|
|
153
|
-
const node1 =
|
|
154
|
-
|
|
155
|
-
expect(
|
|
153
|
+
expect(binTree.getHeight(binTree.root, 'ITERATIVE')).toBe(-1);
|
|
154
|
+
expect(binTree.getMinHeight()).toBe(-1);
|
|
155
|
+
const node1 = binTree.createNode(1);
|
|
156
|
+
binTree.add(node1);
|
|
157
|
+
expect(binTree.size).toBe(1);
|
|
156
158
|
|
|
157
159
|
const leftChild = new BinaryTreeNode<number>(2);
|
|
158
160
|
const rightChild = new BinaryTreeNode<number>(3);
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
const root =
|
|
161
|
+
binTree.add(leftChild);
|
|
162
|
+
binTree.add(rightChild);
|
|
163
|
+
const root = binTree.root;
|
|
162
164
|
|
|
163
165
|
expect(leftChild.familyPosition).toBe('LEFT');
|
|
164
|
-
|
|
165
|
-
|
|
166
|
+
binTree.add(null);
|
|
167
|
+
binTree.add(new BinaryTreeNode<number>(4));
|
|
166
168
|
expect(rightChild.familyPosition).toBe('RIGHT');
|
|
167
169
|
expect(root?.familyPosition).toBe('ROOT');
|
|
168
170
|
expect(leftChild.familyPosition).toBe('ROOT_LEFT');
|
|
169
|
-
|
|
171
|
+
binTree.add(new BinaryTreeNode<number>(5));
|
|
170
172
|
expect(rightChild.familyPosition).toBe('ROOT_RIGHT');
|
|
171
173
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
+
binTree.delete(new BinaryTreeNode<number>(200));
|
|
175
|
+
binTree.delete(rightChild);
|
|
174
176
|
|
|
175
177
|
if (node1) {
|
|
176
|
-
const result =
|
|
178
|
+
const result = binTree.delete(node1);
|
|
177
179
|
expect(result).toHaveLength(1);
|
|
178
|
-
expect(
|
|
179
|
-
expect(
|
|
180
|
+
expect(binTree.size).toBe(4);
|
|
181
|
+
expect(binTree.getMinHeight(binTree.root, 'RECURSIVE')).toBe(1);
|
|
180
182
|
}
|
|
181
183
|
});
|
|
182
184
|
|
|
183
185
|
it('should add and find nodes', () => {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
186
|
+
binTree.add([1, 1]);
|
|
187
|
+
binTree.add(undefined);
|
|
188
|
+
binTree.add([2, 2]);
|
|
189
|
+
binTree.add([3, 3]);
|
|
188
190
|
|
|
189
|
-
expect(
|
|
190
|
-
expect(
|
|
191
|
-
expect(
|
|
192
|
-
expect(
|
|
193
|
-
const node4 =
|
|
194
|
-
expect(
|
|
195
|
-
expect(
|
|
196
|
-
expect(
|
|
191
|
+
expect(binTree.has(1)).toBe(true);
|
|
192
|
+
expect(binTree.has(2)).toBe(true);
|
|
193
|
+
expect(binTree.has(3)).toBe(true);
|
|
194
|
+
expect(binTree.has(4)).toBe(false);
|
|
195
|
+
const node4 = binTree.getNode(4);
|
|
196
|
+
expect(binTree.has(node4)).toBe(false);
|
|
197
|
+
expect(binTree.has(node => node === node4)).toBe(false);
|
|
198
|
+
expect(binTree.has(node => node.key?.toString() === '3')).toBe(true);
|
|
197
199
|
});
|
|
198
200
|
|
|
199
201
|
it('should the clone method work fine', () => {
|
|
200
|
-
expect(
|
|
201
|
-
|
|
202
|
-
expect(
|
|
203
|
-
expect(
|
|
204
|
-
expect(
|
|
205
|
-
expect(
|
|
206
|
-
expect(
|
|
207
|
-
expect(
|
|
208
|
-
expect(
|
|
209
|
-
|
|
210
|
-
const cloned =
|
|
202
|
+
expect(binTree.isEmpty()).toBe(true);
|
|
203
|
+
binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
204
|
+
expect(binTree.root?.key).toBe(4);
|
|
205
|
+
expect(binTree.root?.left?.key).toBe(2);
|
|
206
|
+
expect(binTree.root?.left?.left).toBe(null);
|
|
207
|
+
expect(binTree.root?.left?.right?.key).toBe(1);
|
|
208
|
+
expect(binTree.root?.right?.key).toBe(6);
|
|
209
|
+
expect(binTree.root?.right?.left?.key).toBe(3);
|
|
210
|
+
expect(binTree.root?.right?.right).toBe(null);
|
|
211
|
+
|
|
212
|
+
const cloned = binTree.clone();
|
|
211
213
|
expect(cloned.root?.key).toBe(4);
|
|
212
214
|
expect(cloned.root?.left?.key).toBe(2);
|
|
213
215
|
expect(cloned.root?.left?.left).toBe(null);
|
|
@@ -244,66 +246,66 @@ describe('BinaryTree', () => {
|
|
|
244
246
|
// cloned.delete(null);
|
|
245
247
|
// cloned.delete(null);
|
|
246
248
|
// cloned.delete(null);
|
|
247
|
-
expect(
|
|
249
|
+
expect(binTree.size).toBe(10);
|
|
248
250
|
expect(cloned.size).toBe(3);
|
|
249
251
|
// expect(cloned.size).toBe(0);
|
|
250
252
|
// expect(cloned.isEmpty()).toBe(true);
|
|
251
253
|
});
|
|
252
254
|
|
|
253
|
-
it('should be a balance
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
255
|
+
it('should be a balance binTree after malicious manipulation', () => {
|
|
256
|
+
binTree.add(3);
|
|
257
|
+
binTree.add(12);
|
|
258
|
+
binTree.addMany(getRandomIntArray(100, 1, 100));
|
|
259
|
+
binTree.add(10);
|
|
258
260
|
|
|
259
|
-
expect(
|
|
260
|
-
const node3 =
|
|
261
|
+
expect(binTree.isPerfectlyBalanced()).toBe(true);
|
|
262
|
+
const node3 = binTree.getNode(3);
|
|
261
263
|
|
|
262
|
-
if (node3) node3.right =
|
|
263
|
-
expect(
|
|
264
|
+
if (node3) node3.right = binTree.createNode(1);
|
|
265
|
+
expect(binTree.isPerfectlyBalanced()).toBe(false);
|
|
264
266
|
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
expect(
|
|
267
|
+
binTree.clear();
|
|
268
|
+
binTree.addMany([1, null, 2, null, 3, null, 4, null, 5, null, 6, null]);
|
|
269
|
+
expect(binTree.isPerfectlyBalanced()).toBe(false);
|
|
268
270
|
});
|
|
269
271
|
|
|
270
272
|
it('should getDepth return correct depth', () => {
|
|
271
|
-
|
|
272
|
-
expect(
|
|
273
|
-
|
|
274
|
-
expect(
|
|
275
|
-
|
|
276
|
-
expect(
|
|
277
|
-
|
|
278
|
-
expect(
|
|
279
|
-
expect(
|
|
280
|
-
expect(
|
|
273
|
+
binTree.add(1);
|
|
274
|
+
expect(binTree.getDepth(1)).toBe(0);
|
|
275
|
+
binTree.add(2);
|
|
276
|
+
expect(binTree.getDepth(2)).toBe(1);
|
|
277
|
+
binTree.add(3);
|
|
278
|
+
expect(binTree.getDepth(3, 1)).toBe(1);
|
|
279
|
+
binTree.add(4);
|
|
280
|
+
expect(binTree.getDepth(4, 1)).toBe(2);
|
|
281
|
+
expect(binTree.getDepth(4)).toBe(2);
|
|
282
|
+
expect(binTree.getDepth(4, 2)).toBe(1);
|
|
281
283
|
});
|
|
282
284
|
|
|
283
285
|
it('should traverse in-order', () => {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
expect(
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
expect(
|
|
290
|
-
|
|
291
|
-
expect(
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
const inOrder =
|
|
286
|
+
binTree.add(null);
|
|
287
|
+
binTree.delete(1);
|
|
288
|
+
expect(binTree.getHeight()).toBe(-1);
|
|
289
|
+
binTree.add(4);
|
|
290
|
+
binTree.add(2);
|
|
291
|
+
expect(binTree.getHeight()).toBe(1);
|
|
292
|
+
binTree.iterationType = 'RECURSIVE';
|
|
293
|
+
expect(binTree.getHeight()).toBe(1);
|
|
294
|
+
binTree.iterationType = 'ITERATIVE';
|
|
295
|
+
|
|
296
|
+
binTree.add(6);
|
|
297
|
+
binTree.add(1);
|
|
298
|
+
binTree.add(new BinaryTreeNode(3));
|
|
299
|
+
binTree.add(5);
|
|
300
|
+
binTree.add(7);
|
|
301
|
+
|
|
302
|
+
const inOrder = binTree.dfs(node => node.key);
|
|
301
303
|
|
|
302
304
|
expect(inOrder).toEqual([1, 2, 3, 4, 5, 6, 7]);
|
|
303
305
|
});
|
|
304
306
|
|
|
305
307
|
it('should isSubtreeBST', () => {
|
|
306
|
-
|
|
308
|
+
binTree.addMany([
|
|
307
309
|
new BinaryTreeNode(4, 4),
|
|
308
310
|
new BinaryTreeNode(2, 2),
|
|
309
311
|
new BinaryTreeNode(6, 6),
|
|
@@ -314,14 +316,14 @@ describe('BinaryTree', () => {
|
|
|
314
316
|
new BinaryTreeNode(4, 4)
|
|
315
317
|
]);
|
|
316
318
|
|
|
317
|
-
expect(
|
|
318
|
-
expect(
|
|
319
|
+
expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
|
|
320
|
+
expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
|
|
319
321
|
});
|
|
320
322
|
|
|
321
323
|
it('should isSubtreeBST', () => {
|
|
322
|
-
expect(
|
|
323
|
-
|
|
324
|
-
expect(
|
|
324
|
+
expect(binTree.toVisual()).toBe('');
|
|
325
|
+
binTree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
|
|
326
|
+
expect(binTree.toVisual()).toBe(
|
|
325
327
|
'N for null\n' +
|
|
326
328
|
' ___4___ \n' +
|
|
327
329
|
' / \\ \n' +
|
|
@@ -330,7 +332,11 @@ describe('BinaryTree', () => {
|
|
|
330
332
|
' 1 3 5 7 \n' +
|
|
331
333
|
' \n'
|
|
332
334
|
);
|
|
333
|
-
const visualized =
|
|
335
|
+
const visualized = binTree.toVisual(undefined, {
|
|
336
|
+
isShowUndefined: true,
|
|
337
|
+
isShowNull: true,
|
|
338
|
+
isShowRedBlackNIL: true
|
|
339
|
+
});
|
|
334
340
|
expect(visualized).toBe(
|
|
335
341
|
'U for undefined\n' +
|
|
336
342
|
'N for null\n' +
|
|
@@ -345,97 +351,97 @@ describe('BinaryTree', () => {
|
|
|
345
351
|
' \n'
|
|
346
352
|
);
|
|
347
353
|
|
|
348
|
-
expect(
|
|
349
|
-
expect(
|
|
350
|
-
expect(
|
|
351
|
-
expect(
|
|
352
|
-
expect(
|
|
354
|
+
expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
|
|
355
|
+
expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
|
|
356
|
+
expect(binTree.getNodes(2, false, null)).toEqual([]);
|
|
357
|
+
expect(binTree.getNodes(undefined)).toEqual([]);
|
|
358
|
+
expect(binTree.getNodes(binTree.getNode(2), false, binTree.root)).toEqual([binTree.getNode(2)]);
|
|
353
359
|
});
|
|
354
360
|
|
|
355
|
-
describe('should
|
|
361
|
+
describe('should isValidKey', () => {
|
|
356
362
|
describe('primitive types', () => {
|
|
357
363
|
it('numbers should be a key', () => {
|
|
358
|
-
expect(
|
|
359
|
-
expect(
|
|
360
|
-
expect(
|
|
361
|
-
expect(
|
|
362
|
-
expect(
|
|
364
|
+
expect(binTree.isValidKey(42)).toBe(true);
|
|
365
|
+
expect(binTree.isValidKey(0)).toBe(true);
|
|
366
|
+
expect(binTree.isValidKey(-1)).toBe(true);
|
|
367
|
+
expect(binTree.isValidKey(Infinity)).toBe(true);
|
|
368
|
+
expect(binTree.isValidKey(-Infinity)).toBe(true);
|
|
363
369
|
});
|
|
364
370
|
|
|
365
371
|
// it('NaN should not be a key', () => {
|
|
366
|
-
// expect(
|
|
372
|
+
// expect(binTree.isValidKey(NaN)).toBe(false);
|
|
367
373
|
// });
|
|
368
374
|
|
|
369
375
|
it('strings should be a key', () => {
|
|
370
|
-
expect(
|
|
371
|
-
expect(
|
|
372
|
-
expect(
|
|
376
|
+
expect(binTree.isValidKey('hello')).toBe(true);
|
|
377
|
+
expect(binTree.isValidKey('')).toBe(true);
|
|
378
|
+
expect(binTree.isValidKey('123')).toBe(true);
|
|
373
379
|
});
|
|
374
380
|
|
|
375
381
|
it('BigInt should be a key', () => {
|
|
376
|
-
expect(
|
|
377
|
-
expect(
|
|
378
|
-
expect(
|
|
382
|
+
expect(binTree.isValidKey(BigInt(42))).toBe(true);
|
|
383
|
+
expect(binTree.isValidKey(BigInt(0))).toBe(true);
|
|
384
|
+
expect(binTree.isValidKey(BigInt(-1))).toBe(true);
|
|
379
385
|
});
|
|
380
386
|
|
|
381
387
|
it('boolean should not be a key', () => {
|
|
382
|
-
expect(
|
|
383
|
-
expect(
|
|
388
|
+
expect(binTree.isValidKey(true)).toBe(true);
|
|
389
|
+
expect(binTree.isValidKey(false)).toBe(true);
|
|
384
390
|
});
|
|
385
391
|
|
|
386
392
|
it('null and undefined should not be a key', () => {
|
|
387
|
-
expect(
|
|
388
|
-
expect(
|
|
393
|
+
expect(binTree.isValidKey(null)).toBe(true);
|
|
394
|
+
expect(binTree.isValidKey(undefined)).toBe(false);
|
|
389
395
|
});
|
|
390
396
|
|
|
391
397
|
it('symbols should not be a key', () => {
|
|
392
|
-
expect(
|
|
393
|
-
expect(
|
|
398
|
+
expect(binTree.isValidKey(Symbol('test'))).toBe(false);
|
|
399
|
+
expect(binTree.isValidKey(Symbol.for('test'))).toBe(false);
|
|
394
400
|
});
|
|
395
401
|
});
|
|
396
402
|
|
|
397
403
|
describe('Date objects', () => {
|
|
398
404
|
it('valid Date objects should be a key', () => {
|
|
399
|
-
expect(
|
|
400
|
-
expect(
|
|
405
|
+
expect(binTree.isValidKey(new Date())).toBe(true);
|
|
406
|
+
expect(binTree.isValidKey(new Date('2024-01-01'))).toBe(true);
|
|
401
407
|
});
|
|
402
408
|
|
|
403
409
|
// it('invalid Date objects should not be a key', () => {
|
|
404
|
-
// expect(
|
|
410
|
+
// expect(binTree.isValidKey(new Date('invalid'))).toBe(false);
|
|
405
411
|
// });
|
|
406
412
|
});
|
|
407
413
|
|
|
408
414
|
describe('arrays', () => {
|
|
409
415
|
it('arrays should be a key as they convert to string', () => {
|
|
410
|
-
expect(
|
|
411
|
-
expect(
|
|
412
|
-
expect(
|
|
416
|
+
expect(binTree.isValidKey([])).toBe(true);
|
|
417
|
+
expect(binTree.isValidKey([1, 2, 3])).toBe(true);
|
|
418
|
+
expect(binTree.isValidKey(['a', 'b', 'c'])).toBe(true);
|
|
413
419
|
});
|
|
414
420
|
});
|
|
415
421
|
|
|
416
422
|
describe('plain objects', () => {
|
|
417
423
|
it('plain objects should not be a key', () => {
|
|
418
|
-
expect(
|
|
419
|
-
expect(
|
|
424
|
+
expect(binTree.isValidKey({})).toBe(false);
|
|
425
|
+
expect(binTree.isValidKey({ a: 1 })).toBe(false);
|
|
420
426
|
});
|
|
421
427
|
});
|
|
422
428
|
|
|
423
429
|
describe('custom objects', () => {
|
|
424
430
|
it('objects with numeric valueOf should be a key', () => {
|
|
425
|
-
expect(
|
|
431
|
+
expect(binTree.isValidKey({ valueOf: () => 42 })).toBe(true);
|
|
426
432
|
});
|
|
427
433
|
|
|
428
434
|
it('objects with string valueOf should be a key', () => {
|
|
429
|
-
expect(
|
|
435
|
+
expect(binTree.isValidKey({ valueOf: () => 'test' })).toBe(true);
|
|
430
436
|
});
|
|
431
437
|
|
|
432
438
|
it('objects with boolean valueOf should not be a key', () => {
|
|
433
|
-
expect(
|
|
439
|
+
expect(binTree.isValidKey({ valueOf: () => true })).toBe(true);
|
|
434
440
|
});
|
|
435
441
|
|
|
436
442
|
it('objects with nested valueOf/toString should be a key', () => {
|
|
437
443
|
expect(
|
|
438
|
-
|
|
444
|
+
binTree.isValidKey({
|
|
439
445
|
valueOf: () => ({ toString: () => '42' })
|
|
440
446
|
})
|
|
441
447
|
).toBe(true);
|
|
@@ -449,7 +455,7 @@ describe('BinaryTree', () => {
|
|
|
449
455
|
valueOf: () => 42
|
|
450
456
|
})
|
|
451
457
|
};
|
|
452
|
-
expect(
|
|
458
|
+
expect(binTree.isValidKey(deeplyNested)).toBe(true);
|
|
453
459
|
});
|
|
454
460
|
|
|
455
461
|
it('objects with very deeply nested conversion should be a key', () => {
|
|
@@ -460,14 +466,14 @@ describe('BinaryTree', () => {
|
|
|
460
466
|
})
|
|
461
467
|
})
|
|
462
468
|
};
|
|
463
|
-
expect(
|
|
469
|
+
expect(binTree.isValidKey(veryDeeplyNested)).toBe(true);
|
|
464
470
|
});
|
|
465
471
|
|
|
466
472
|
it('objects with circular references should not be a key', () => {
|
|
467
473
|
const circular: any = {
|
|
468
474
|
valueOf: () => circular
|
|
469
475
|
};
|
|
470
|
-
expect(
|
|
476
|
+
expect(binTree.isValidKey(circular)).toBe(false);
|
|
471
477
|
});
|
|
472
478
|
});
|
|
473
479
|
|
|
@@ -480,7 +486,7 @@ describe('BinaryTree', () => {
|
|
|
480
486
|
})
|
|
481
487
|
})
|
|
482
488
|
};
|
|
483
|
-
expect(
|
|
489
|
+
expect(binTree.isValidKey(complexObject)).toBe(false);
|
|
484
490
|
});
|
|
485
491
|
|
|
486
492
|
it('objects returning primitive values should be handled correctly', () => {
|
|
@@ -497,40 +503,40 @@ describe('BinaryTree', () => {
|
|
|
497
503
|
})
|
|
498
504
|
})
|
|
499
505
|
};
|
|
500
|
-
expect(
|
|
506
|
+
expect(binTree.isValidKey(complexObject)).toBe(true);
|
|
501
507
|
});
|
|
502
508
|
});
|
|
503
509
|
|
|
504
510
|
describe('type checking', () => {
|
|
505
511
|
it('should work with type guard in array methods', () => {
|
|
506
512
|
const values: unknown[] = [42, 'test', true, null, undefined, new Date()];
|
|
507
|
-
const comparableValues = values.filter(item =>
|
|
513
|
+
const comparableValues = values.filter(item => binTree.isValidKey(item));
|
|
508
514
|
expect(comparableValues.length).toBe(5);
|
|
509
515
|
});
|
|
510
516
|
});
|
|
511
517
|
});
|
|
512
518
|
|
|
513
519
|
it('should isLeaf', () => {
|
|
514
|
-
expect(
|
|
515
|
-
expect(
|
|
516
|
-
|
|
517
|
-
const leftMost =
|
|
518
|
-
expect(
|
|
519
|
-
expect(
|
|
520
|
-
const rightMost =
|
|
521
|
-
expect(
|
|
522
|
-
expect(
|
|
523
|
-
});
|
|
524
|
-
|
|
525
|
-
it('should
|
|
526
|
-
expect(
|
|
527
|
-
expect([...
|
|
528
|
-
|
|
529
|
-
expect(
|
|
530
|
-
expect(
|
|
520
|
+
expect(binTree.getLeftMost()).toBe(undefined);
|
|
521
|
+
expect(binTree.getRightMost()).toBe(undefined);
|
|
522
|
+
binTree.addMany([4, 2, 6, 1, 3, 5, 7, 4]);
|
|
523
|
+
const leftMost = binTree.getLeftMost();
|
|
524
|
+
expect(binTree.isLeaf(leftMost)).toBe(true);
|
|
525
|
+
expect(binTree.isLeaf(null)).toBe(true);
|
|
526
|
+
const rightMost = binTree.getRightMost();
|
|
527
|
+
expect(binTree.isLeaf(rightMost)).toBe(true);
|
|
528
|
+
expect(binTree.isLeaf(null)).toBe(true);
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
it('should binTree traverse', () => {
|
|
532
|
+
expect(binTree.dfs()).toEqual([]);
|
|
533
|
+
expect([...binTree.values()]).toEqual([]);
|
|
534
|
+
binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
535
|
+
expect(binTree.dfs(node => node.key, 'PRE', undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
536
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', false)).toEqual([
|
|
531
537
|
4, 2, 1, 5, 6, 3, 7
|
|
532
538
|
]);
|
|
533
|
-
expect(
|
|
539
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', true)).toEqual([
|
|
534
540
|
4,
|
|
535
541
|
2,
|
|
536
542
|
null,
|
|
@@ -543,11 +549,11 @@ describe('BinaryTree', () => {
|
|
|
543
549
|
null
|
|
544
550
|
]);
|
|
545
551
|
|
|
546
|
-
expect(
|
|
547
|
-
expect(
|
|
552
|
+
expect(binTree.dfs(node => node.key, 'PRE', undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
|
|
553
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', false)).toEqual([
|
|
548
554
|
4, 2, 1, 5, 6, 3, 7
|
|
549
555
|
]);
|
|
550
|
-
expect(
|
|
556
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', true)).toEqual([
|
|
551
557
|
4,
|
|
552
558
|
2,
|
|
553
559
|
null,
|
|
@@ -560,11 +566,11 @@ describe('BinaryTree', () => {
|
|
|
560
566
|
null
|
|
561
567
|
]);
|
|
562
568
|
|
|
563
|
-
expect(
|
|
564
|
-
expect(
|
|
569
|
+
expect(binTree.dfs(node => node.key, 'IN', undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
570
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', false)).toEqual([
|
|
565
571
|
2, 5, 1, 4, 7, 3, 6
|
|
566
572
|
]);
|
|
567
|
-
expect(
|
|
573
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', true)).toEqual([
|
|
568
574
|
null,
|
|
569
575
|
2,
|
|
570
576
|
5,
|
|
@@ -577,11 +583,11 @@ describe('BinaryTree', () => {
|
|
|
577
583
|
null
|
|
578
584
|
]);
|
|
579
585
|
|
|
580
|
-
expect(
|
|
581
|
-
expect(
|
|
586
|
+
expect(binTree.dfs(node => node.key, 'IN', undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
|
|
587
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', false)).toEqual([
|
|
582
588
|
2, 5, 1, 4, 7, 3, 6
|
|
583
589
|
]);
|
|
584
|
-
expect(
|
|
590
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', true)).toEqual([
|
|
585
591
|
null,
|
|
586
592
|
2,
|
|
587
593
|
5,
|
|
@@ -594,11 +600,11 @@ describe('BinaryTree', () => {
|
|
|
594
600
|
null
|
|
595
601
|
]);
|
|
596
602
|
|
|
597
|
-
expect(
|
|
598
|
-
expect(
|
|
603
|
+
expect(binTree.dfs(node => node.key, 'POST', undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
604
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', false)).toEqual([
|
|
599
605
|
5, 1, 2, 7, 3, 6, 4
|
|
600
606
|
]);
|
|
601
|
-
expect(
|
|
607
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', true)).toEqual([
|
|
602
608
|
null,
|
|
603
609
|
5,
|
|
604
610
|
null,
|
|
@@ -611,11 +617,11 @@ describe('BinaryTree', () => {
|
|
|
611
617
|
4
|
|
612
618
|
]);
|
|
613
619
|
|
|
614
|
-
expect(
|
|
615
|
-
expect(
|
|
620
|
+
expect(binTree.dfs(node => node.key, 'POST', undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
|
|
621
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', false)).toEqual([
|
|
616
622
|
5, 1, 2, 7, 3, 6, 4
|
|
617
623
|
]);
|
|
618
|
-
expect(
|
|
624
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', true)).toEqual([
|
|
619
625
|
null,
|
|
620
626
|
5,
|
|
621
627
|
null,
|
|
@@ -629,93 +635,75 @@ describe('BinaryTree', () => {
|
|
|
629
635
|
]);
|
|
630
636
|
});
|
|
631
637
|
|
|
632
|
-
it('should sub
|
|
633
|
-
|
|
634
|
-
expect(
|
|
635
|
-
expect(
|
|
636
|
-
6,
|
|
637
|
-
]);
|
|
638
|
-
expect(
|
|
639
|
-
6,
|
|
640
|
-
|
|
641
|
-
7,
|
|
642
|
-
null
|
|
643
|
-
]);
|
|
638
|
+
it('should sub binTree traverse', () => {
|
|
639
|
+
binTree.addMany([4, 2, 6, null, 1, 3, null, 5, null, 7]);
|
|
640
|
+
expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
|
|
641
|
+
expect(
|
|
642
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', false)
|
|
643
|
+
).toEqual([6, 3, 7]);
|
|
644
|
+
expect(
|
|
645
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', true)
|
|
646
|
+
).toEqual([6, 3, 7, null]);
|
|
644
647
|
|
|
645
|
-
expect(
|
|
646
|
-
expect(
|
|
647
|
-
6,
|
|
648
|
-
]);
|
|
649
|
-
expect(
|
|
650
|
-
6,
|
|
651
|
-
|
|
652
|
-
7,
|
|
653
|
-
null
|
|
654
|
-
]);
|
|
648
|
+
expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
|
|
649
|
+
expect(
|
|
650
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', false)
|
|
651
|
+
).toEqual([6, 3, 7]);
|
|
652
|
+
expect(
|
|
653
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', true)
|
|
654
|
+
).toEqual([6, 3, 7, null]);
|
|
655
655
|
|
|
656
|
-
expect(
|
|
657
|
-
expect(
|
|
658
|
-
|
|
659
|
-
]);
|
|
660
|
-
expect(
|
|
661
|
-
7,
|
|
662
|
-
|
|
663
|
-
6,
|
|
664
|
-
null
|
|
665
|
-
]);
|
|
656
|
+
expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
657
|
+
expect(
|
|
658
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', false)
|
|
659
|
+
).toEqual([7, 3, 6]);
|
|
660
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', true)).toEqual(
|
|
661
|
+
[7, 3, 6, null]
|
|
662
|
+
);
|
|
666
663
|
|
|
667
|
-
expect(
|
|
668
|
-
expect(
|
|
669
|
-
|
|
670
|
-
]);
|
|
671
|
-
expect(
|
|
672
|
-
7,
|
|
673
|
-
|
|
674
|
-
6,
|
|
675
|
-
null
|
|
676
|
-
]);
|
|
664
|
+
expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
665
|
+
expect(
|
|
666
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', false)
|
|
667
|
+
).toEqual([7, 3, 6]);
|
|
668
|
+
expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', true)).toEqual(
|
|
669
|
+
[7, 3, 6, null]
|
|
670
|
+
);
|
|
677
671
|
|
|
678
|
-
expect(
|
|
679
|
-
expect(
|
|
680
|
-
|
|
681
|
-
]);
|
|
682
|
-
expect(
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
null,
|
|
686
|
-
6
|
|
687
|
-
]);
|
|
672
|
+
expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
|
|
673
|
+
expect(
|
|
674
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', false)
|
|
675
|
+
).toEqual([7, 3, 6]);
|
|
676
|
+
expect(
|
|
677
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', true)
|
|
678
|
+
).toEqual([7, 3, null, 6]);
|
|
688
679
|
|
|
689
|
-
expect(
|
|
690
|
-
expect(
|
|
691
|
-
|
|
692
|
-
]);
|
|
693
|
-
expect(
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
null,
|
|
697
|
-
6
|
|
698
|
-
]);
|
|
680
|
+
expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
|
|
681
|
+
expect(
|
|
682
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', false)
|
|
683
|
+
).toEqual([7, 3, 6]);
|
|
684
|
+
expect(
|
|
685
|
+
binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', true)
|
|
686
|
+
).toEqual([7, 3, null, 6]);
|
|
699
687
|
});
|
|
700
688
|
|
|
701
|
-
it('should clear the
|
|
702
|
-
|
|
703
|
-
|
|
689
|
+
it('should clear the binTree', () => {
|
|
690
|
+
binTree.add(1);
|
|
691
|
+
binTree.add(2);
|
|
704
692
|
|
|
705
|
-
expect(
|
|
693
|
+
expect(binTree.size).toBe(2);
|
|
706
694
|
|
|
707
|
-
|
|
695
|
+
binTree.clear();
|
|
708
696
|
|
|
709
|
-
expect(
|
|
710
|
-
expect(
|
|
697
|
+
expect(binTree.size).toBe(0);
|
|
698
|
+
expect(binTree.root).toBeUndefined();
|
|
711
699
|
});
|
|
712
700
|
|
|
713
701
|
it('should duplicated nodes just replace the node exists', function () {
|
|
714
|
-
|
|
715
|
-
expect(
|
|
716
|
-
|
|
702
|
+
binTree.clear();
|
|
703
|
+
expect(binTree.bfs()).toEqual([]);
|
|
704
|
+
binTree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
|
|
717
705
|
|
|
718
|
-
expect(
|
|
706
|
+
expect(binTree.bfs(node => (node ? node.key : null), undefined, undefined, true)).toEqual([
|
|
719
707
|
-10,
|
|
720
708
|
9,
|
|
721
709
|
20,
|
|
@@ -734,8 +722,8 @@ describe('BinaryTree', () => {
|
|
|
734
722
|
});
|
|
735
723
|
|
|
736
724
|
// it('should keyValueNodeEntryRawToNodeAndValue', () => {
|
|
737
|
-
// const
|
|
738
|
-
// const node0 =
|
|
725
|
+
// const binTree = new BinaryTree<number>();
|
|
726
|
+
// const node0 = binTree.keyValueNodeEntryRawToNodeAndValue(0);
|
|
739
727
|
// expect(node0).toEqual([
|
|
740
728
|
// {
|
|
741
729
|
// _left: undefined,
|
|
@@ -747,18 +735,18 @@ describe('BinaryTree', () => {
|
|
|
747
735
|
// undefined
|
|
748
736
|
// ]);
|
|
749
737
|
//
|
|
750
|
-
// const nodeUndefined =
|
|
738
|
+
// const nodeUndefined = binTree.keyValueNodeEntryRawToNodeAndValue(undefined);
|
|
751
739
|
// expect(nodeUndefined).toEqual([undefined, undefined]);
|
|
752
740
|
//
|
|
753
|
-
// const nodeNull =
|
|
741
|
+
// const nodeNull = binTree.keyValueNodeEntryRawToNodeAndValue(null);
|
|
754
742
|
// expect(nodeNull).toEqual([null, undefined]);
|
|
755
743
|
//
|
|
756
|
-
// const [, nodeWithSeparateValue] =
|
|
744
|
+
// const [, nodeWithSeparateValue] = binTree.keyValueNodeEntryRawToNodeAndValue(7, 77);
|
|
757
745
|
// expect(nodeWithSeparateValue).toBe(77);
|
|
758
746
|
//
|
|
759
|
-
// expect(
|
|
747
|
+
// expect(binTree.keyValueNodeEntryRawToNodeAndValue([undefined, 2])).toEqual([undefined, undefined]);
|
|
760
748
|
//
|
|
761
|
-
// expect(
|
|
749
|
+
// expect(binTree.keyValueNodeEntryRawToNodeAndValue(Symbol('test') as unknown as number)).toEqual([
|
|
762
750
|
// undefined,
|
|
763
751
|
// undefined
|
|
764
752
|
// ]);
|
|
@@ -770,14 +758,14 @@ describe('BinaryTree', () => {
|
|
|
770
758
|
// });
|
|
771
759
|
|
|
772
760
|
it('should replace value', () => {
|
|
773
|
-
const
|
|
774
|
-
expect(
|
|
775
|
-
expect(
|
|
776
|
-
|
|
777
|
-
expect(
|
|
778
|
-
|
|
779
|
-
expect(
|
|
780
|
-
expect(
|
|
761
|
+
const binTree = new BinaryTree<number, string>([4, 5, [1, '1'], 2, 3], { isMapMode: false });
|
|
762
|
+
expect(binTree.get(1)).toBe('1');
|
|
763
|
+
expect(binTree.getNode(1)?.value).toBe('1');
|
|
764
|
+
binTree.add(1, 'a');
|
|
765
|
+
expect(binTree.get(1)).toBe('a');
|
|
766
|
+
binTree.add([1, 'b']);
|
|
767
|
+
expect(binTree.getNode(1)?.value).toBe('b');
|
|
768
|
+
expect(binTree.get(1)).toBe('b');
|
|
781
769
|
const treeMap = new BinaryTree<number>([4, 5, [1, '1'], 2, 3]);
|
|
782
770
|
expect(treeMap.get(1)).toBe('1');
|
|
783
771
|
expect(treeMap.getNode(1)?.value).toBe(undefined);
|
|
@@ -791,7 +779,7 @@ describe('BinaryTree', () => {
|
|
|
791
779
|
|
|
792
780
|
describe('BinaryTree ensureNode', () => {
|
|
793
781
|
it('should ensureNode with toEntryFn', () => {
|
|
794
|
-
const
|
|
782
|
+
const binTree = new BinaryTree<
|
|
795
783
|
number,
|
|
796
784
|
string,
|
|
797
785
|
{
|
|
@@ -799,62 +787,62 @@ describe('BinaryTree ensureNode', () => {
|
|
|
799
787
|
name: string;
|
|
800
788
|
}
|
|
801
789
|
>([], { toEntryFn: rawElement => [rawElement.id, rawElement.name] });
|
|
802
|
-
|
|
803
|
-
const node =
|
|
804
|
-
expect(
|
|
805
|
-
expect(
|
|
806
|
-
expect(
|
|
807
|
-
expect(
|
|
808
|
-
expect(
|
|
790
|
+
binTree.add([1, 'Pablo']);
|
|
791
|
+
const node = binTree.getNode(1);
|
|
792
|
+
// expect(binTree.ensureNode({ id: 1, name: 'Pablo' })).toBe(node);
|
|
793
|
+
expect(binTree.ensureNode([1, 'Pablo'])).toBe(node);
|
|
794
|
+
expect(binTree.ensureNode([null, 'Pablo'])).toBe(null);
|
|
795
|
+
expect(binTree.ensureNode([undefined, 'Pablo'])).toBe(undefined);
|
|
796
|
+
expect(binTree.ensureNode(Symbol('test') as unknown as number)).toBe(undefined);
|
|
809
797
|
});
|
|
810
798
|
});
|
|
811
799
|
|
|
812
800
|
describe('BinaryTree Morris Traversal', () => {
|
|
813
|
-
// Create a binary
|
|
814
|
-
const
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
801
|
+
// Create a binary binTree
|
|
802
|
+
const binTree = new BinaryTree<number>();
|
|
803
|
+
binTree.add(1);
|
|
804
|
+
binTree.add(2);
|
|
805
|
+
binTree.add(3);
|
|
806
|
+
binTree.add(4);
|
|
807
|
+
binTree.add(5);
|
|
820
808
|
it('should perform in-order Morris traversal correctly as dfs traversal', () => {
|
|
821
809
|
// Perform in-order Morris traversal
|
|
822
|
-
const result =
|
|
810
|
+
const result = binTree.morris(node => node.key, 'IN');
|
|
823
811
|
|
|
824
812
|
// Expected in-order traversal result
|
|
825
813
|
const expected = [4, 2, 5, 1, 3];
|
|
826
814
|
|
|
827
815
|
expect(result).toEqual(expected);
|
|
828
|
-
expect(
|
|
829
|
-
expect(
|
|
816
|
+
expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
|
|
817
|
+
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
|
|
830
818
|
});
|
|
831
819
|
|
|
832
820
|
it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
|
|
833
821
|
// Perform pre-order Morris traversal
|
|
834
|
-
const result =
|
|
822
|
+
const result = binTree.morris(node => node.key, 'PRE');
|
|
835
823
|
|
|
836
824
|
// Expected pre-order traversal result
|
|
837
825
|
const expected = [1, 2, 4, 5, 3];
|
|
838
826
|
|
|
839
827
|
expect(result).toEqual(expected);
|
|
840
|
-
expect(
|
|
828
|
+
expect(binTree.dfs(node => node.key, 'PRE')).toEqual(expected);
|
|
841
829
|
});
|
|
842
830
|
|
|
843
831
|
it('should perform post-order Morris traversal correctly as dfs traversal', () => {
|
|
844
832
|
// Perform post-order Morris traversal
|
|
845
|
-
const result =
|
|
833
|
+
const result = binTree.morris(node => node.key, 'POST');
|
|
846
834
|
|
|
847
835
|
// Expected post-order traversal result
|
|
848
836
|
const expected = [4, 5, 2, 3, 1];
|
|
849
837
|
|
|
850
838
|
expect(result).toEqual([4, 5, 2, 3, 1]);
|
|
851
|
-
expect(
|
|
839
|
+
expect(binTree.dfs(node => node.key, 'POST')).toEqual(expected);
|
|
852
840
|
});
|
|
853
841
|
|
|
854
|
-
it('after morris traversals should the structure of the
|
|
855
|
-
const node1 =
|
|
856
|
-
const node2 =
|
|
857
|
-
const node3 =
|
|
842
|
+
it('after morris traversals should the structure of the binTree be correct', () => {
|
|
843
|
+
const node1 = binTree.getNode(1);
|
|
844
|
+
const node2 = binTree.getNode(2);
|
|
845
|
+
const node3 = binTree.getNode(3);
|
|
858
846
|
expect(node1?.left).toBe(node2);
|
|
859
847
|
expect(node1?.right).toBe(node3);
|
|
860
848
|
});
|
|
@@ -875,11 +863,13 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
875
863
|
const binTree = new BinaryTree<number, number, { obj: { id: number } }>([], {
|
|
876
864
|
toEntryFn: ele => [ele.obj.id, ele.obj.id]
|
|
877
865
|
});
|
|
878
|
-
binTree.
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
866
|
+
binTree.addMany([
|
|
867
|
+
{ obj: { id: 1 } },
|
|
868
|
+
{ obj: { id: 2 } },
|
|
869
|
+
{ obj: { id: 3 } },
|
|
870
|
+
{ obj: { id: 4 } },
|
|
871
|
+
{ obj: { id: 5 } }
|
|
872
|
+
]);
|
|
883
873
|
|
|
884
874
|
const expected = [4, 2, 5, 1, 3];
|
|
885
875
|
|
|
@@ -911,21 +901,21 @@ describe('BinaryTree toEntryFn', () => {
|
|
|
911
901
|
{ obj: { id: 1 }, valueOf: () => 1 },
|
|
912
902
|
{ obj: { id: 3 }, valueOf: () => 3 }
|
|
913
903
|
];
|
|
914
|
-
const
|
|
904
|
+
const binTree = new BinaryTree<{ obj: { id: number }; valueOf: () => number }, number>(data);
|
|
915
905
|
|
|
916
|
-
expect(
|
|
917
|
-
expect(
|
|
918
|
-
expect(
|
|
906
|
+
expect(binTree.morris(node => node.key, 'IN')).toEqual(data.sort((a, b) => a.obj.id - b.obj.id));
|
|
907
|
+
expect(binTree.dfs(node => node.key, 'IN')).toEqual(data);
|
|
908
|
+
expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(data);
|
|
919
909
|
});
|
|
920
910
|
});
|
|
921
911
|
|
|
922
912
|
describe('BinaryTree traversals', () => {
|
|
923
913
|
it('traversals', () => {
|
|
924
|
-
const
|
|
914
|
+
const binTree = new BinaryTree<number>();
|
|
925
915
|
|
|
926
916
|
const arr = [35, 20, 40, 15, 29, null, 50, null, 16, 28, 30, 45, 55];
|
|
927
|
-
|
|
928
|
-
expect(
|
|
917
|
+
binTree.refill(arr);
|
|
918
|
+
expect(binTree.bfs(node => node, binTree.root, 'ITERATIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
929
919
|
35,
|
|
930
920
|
20,
|
|
931
921
|
40,
|
|
@@ -940,7 +930,7 @@ describe('BinaryTree traversals', () => {
|
|
|
940
930
|
45,
|
|
941
931
|
55
|
|
942
932
|
]);
|
|
943
|
-
expect(
|
|
933
|
+
expect(binTree.bfs(node => node, binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
944
934
|
35,
|
|
945
935
|
20,
|
|
946
936
|
40,
|
|
@@ -955,241 +945,233 @@ describe('BinaryTree traversals', () => {
|
|
|
955
945
|
45,
|
|
956
946
|
55
|
|
957
947
|
]);
|
|
958
|
-
expect(
|
|
959
|
-
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
960
|
-
|
|
961
|
-
expect(
|
|
962
|
-
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
963
|
-
|
|
948
|
+
expect(binTree.bfs(node => node, binTree.root, 'ITERATIVE').map(node => (node === null ? null : node.key))).toEqual(
|
|
949
|
+
[35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]
|
|
950
|
+
);
|
|
951
|
+
expect(binTree.bfs(node => node, binTree.root, 'RECURSIVE').map(node => (node === null ? null : node.key))).toEqual(
|
|
952
|
+
[35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55]
|
|
953
|
+
);
|
|
964
954
|
|
|
965
|
-
expect(
|
|
966
|
-
expect(
|
|
955
|
+
expect(binTree.dfs(node => node.key, 'PRE')).toEqual([35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55]);
|
|
956
|
+
expect(binTree.dfs(node => node.key, 'PRE', binTree.root, 'RECURSIVE')).toEqual([
|
|
967
957
|
35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
|
|
968
958
|
]);
|
|
969
959
|
expect(
|
|
970
|
-
|
|
960
|
+
binTree.dfs(node => node, 'PRE', binTree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))
|
|
961
|
+
).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
|
|
962
|
+
expect(
|
|
963
|
+
binTree.dfs(node => node, 'PRE', binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
|
|
971
964
|
).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
|
|
972
|
-
expect(tree.dfs(node => node, 'PRE', tree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))).toEqual([
|
|
973
|
-
35,
|
|
974
|
-
20,
|
|
975
|
-
15,
|
|
976
|
-
null,
|
|
977
|
-
16,
|
|
978
|
-
29,
|
|
979
|
-
28,
|
|
980
|
-
30,
|
|
981
|
-
40,
|
|
982
|
-
null,
|
|
983
|
-
50,
|
|
984
|
-
45,
|
|
985
|
-
55
|
|
986
|
-
]);
|
|
987
965
|
|
|
988
|
-
expect(
|
|
989
|
-
expect(
|
|
990
|
-
expect(
|
|
966
|
+
expect(binTree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
|
|
967
|
+
expect(binTree.dfs(node => node.key, 'POST')).toEqual([16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35]);
|
|
968
|
+
expect(binTree.dfs(node => node.key, 'POST', binTree.root, 'RECURSIVE')).toEqual([
|
|
991
969
|
16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
|
|
992
970
|
]);
|
|
993
|
-
expect(
|
|
994
|
-
|
|
971
|
+
expect(binTree.bfs(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
|
|
972
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
973
|
+
]);
|
|
974
|
+
expect(binTree.bfs(node => node.key, binTree.root, 'ITERATIVE')).toEqual([
|
|
975
|
+
35, 20, 40, 15, 29, 50, 16, 28, 30, 45, 55
|
|
976
|
+
]);
|
|
995
977
|
|
|
996
|
-
expect(
|
|
978
|
+
expect(binTree.listLevels(node => node.key)).toEqual([[35], [20, 40], [15, 29, 50], [16, 28, 30, 45, 55]]);
|
|
997
979
|
|
|
998
|
-
expect(
|
|
980
|
+
expect(binTree.listLevels(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
|
|
999
981
|
[35],
|
|
1000
982
|
[20, 40],
|
|
1001
983
|
[15, 29, 50],
|
|
1002
984
|
[16, 28, 30, 45, 55]
|
|
1003
985
|
]);
|
|
1004
|
-
expect(
|
|
986
|
+
expect(binTree.listLevels(node => (node ? node.key : null), binTree.root, 'ITERATIVE', true)).toEqual([
|
|
1005
987
|
[35],
|
|
1006
988
|
[20, 40],
|
|
1007
989
|
[15, 29, null, 50],
|
|
1008
990
|
[null, 16, 28, 30, 45, 55]
|
|
1009
991
|
]);
|
|
1010
|
-
expect(
|
|
992
|
+
expect(binTree.listLevels(node => (node ? node.key : null), binTree.root, 'RECURSIVE', true)).toEqual([
|
|
1011
993
|
[35],
|
|
1012
994
|
[20, 40],
|
|
1013
995
|
[15, 29, null, 50],
|
|
1014
996
|
[null, 16, 28, 30, 45, 55]
|
|
1015
997
|
]);
|
|
1016
|
-
|
|
1017
|
-
expect(
|
|
998
|
+
binTree.clear();
|
|
999
|
+
expect(binTree.listLevels()).toEqual([]);
|
|
1018
1000
|
});
|
|
1019
1001
|
});
|
|
1020
1002
|
|
|
1021
1003
|
describe('BinaryTree', () => {
|
|
1022
|
-
let
|
|
1004
|
+
let binTree: BinaryTree<number, string>;
|
|
1023
1005
|
|
|
1024
1006
|
beforeEach(() => {
|
|
1025
|
-
|
|
1007
|
+
binTree = new BinaryTree<number, string>([], {
|
|
1026
1008
|
iterationType: 'RECURSIVE'
|
|
1027
1009
|
});
|
|
1028
1010
|
});
|
|
1029
1011
|
|
|
1030
1012
|
afterEach(() => {
|
|
1031
|
-
|
|
1013
|
+
binTree.clear();
|
|
1032
1014
|
});
|
|
1033
1015
|
|
|
1034
1016
|
it('should create an empty BinaryTree', () => {
|
|
1035
|
-
expect(
|
|
1036
|
-
expect(
|
|
1037
|
-
expect(
|
|
1017
|
+
expect(binTree.size).toBe(0);
|
|
1018
|
+
expect(binTree.isEmpty()).toBe(true);
|
|
1019
|
+
expect(binTree.root).toBe(undefined);
|
|
1038
1020
|
});
|
|
1039
1021
|
|
|
1040
|
-
it('should add nodes to the
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1022
|
+
it('should add nodes to the binTree', () => {
|
|
1023
|
+
binTree.add([5, 'A']);
|
|
1024
|
+
binTree.add([3, 'B']);
|
|
1025
|
+
binTree.add([7, 'C']);
|
|
1044
1026
|
|
|
1045
|
-
expect(
|
|
1046
|
-
expect(
|
|
1047
|
-
expect(
|
|
1027
|
+
expect(binTree.size).toBe(3);
|
|
1028
|
+
expect(binTree.isEmpty()).toBe(false);
|
|
1029
|
+
expect(binTree.root?.key).toBe(5);
|
|
1048
1030
|
});
|
|
1049
1031
|
|
|
1050
1032
|
it('should clear the BinaryTree', () => {
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1033
|
+
binTree.add([5, 'A']);
|
|
1034
|
+
binTree.add([3, 'B']);
|
|
1035
|
+
binTree.add([7, 'C']);
|
|
1054
1036
|
|
|
1055
|
-
|
|
1037
|
+
binTree.clear();
|
|
1056
1038
|
|
|
1057
|
-
expect(
|
|
1058
|
-
expect(
|
|
1059
|
-
expect(
|
|
1039
|
+
expect(binTree.size).toBe(0);
|
|
1040
|
+
expect(binTree.isEmpty()).toBe(true);
|
|
1041
|
+
expect(binTree.root).toBe(undefined);
|
|
1060
1042
|
});
|
|
1061
1043
|
|
|
1062
1044
|
it('should get nodes by key', () => {
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1045
|
+
binTree.add([5, 'A']);
|
|
1046
|
+
binTree.add([3, 'B']);
|
|
1047
|
+
binTree.add([7, 'C']);
|
|
1066
1048
|
|
|
1067
|
-
const nodeA =
|
|
1068
|
-
const nodeB =
|
|
1049
|
+
const nodeA = binTree.getNode(5);
|
|
1050
|
+
const nodeB = binTree.getNode(3);
|
|
1069
1051
|
|
|
1070
1052
|
expect(nodeA?.key).toBe(5);
|
|
1071
1053
|
expect(nodeA?.value).toBe(undefined);
|
|
1072
1054
|
expect(nodeB?.key).toBe(3);
|
|
1073
|
-
expect(
|
|
1055
|
+
expect(binTree.get(nodeB)).toBe('B');
|
|
1074
1056
|
});
|
|
1075
1057
|
|
|
1076
|
-
it('should return
|
|
1077
|
-
|
|
1058
|
+
it('should return undefined when getting a non-existent node', () => {
|
|
1059
|
+
binTree.add([5, 'A']);
|
|
1078
1060
|
|
|
1079
|
-
const node =
|
|
1061
|
+
const node = binTree.getNode(3);
|
|
1080
1062
|
|
|
1081
|
-
expect(node).toBe(
|
|
1063
|
+
expect(node).toBe(undefined);
|
|
1082
1064
|
});
|
|
1083
1065
|
|
|
1084
1066
|
it('should get the depth of a node', () => {
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1067
|
+
binTree.add([5, 'A']);
|
|
1068
|
+
binTree.add([3, 'B']);
|
|
1069
|
+
binTree.add([7, 'C']);
|
|
1088
1070
|
|
|
1089
|
-
expect(
|
|
1090
|
-
expect(
|
|
1071
|
+
expect(binTree.getDepth(7)).toBe(1);
|
|
1072
|
+
expect(binTree.getDepth(3)).toBe(1);
|
|
1091
1073
|
});
|
|
1092
1074
|
|
|
1093
|
-
it('should get the height of the
|
|
1094
|
-
expect(
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1075
|
+
it('should get the height of the binTree', () => {
|
|
1076
|
+
expect(binTree.getMinHeight()).toBe(-1);
|
|
1077
|
+
binTree.add([5, 'A']);
|
|
1078
|
+
binTree.add(3, 'B');
|
|
1079
|
+
binTree.add([7, 'C']);
|
|
1098
1080
|
|
|
1099
|
-
expect(
|
|
1100
|
-
expect(
|
|
1101
|
-
expect(
|
|
1081
|
+
expect(binTree.getHeight()).toBe(1);
|
|
1082
|
+
expect(binTree.getHeight(undefined, 'RECURSIVE')).toBe(1);
|
|
1083
|
+
expect(binTree.getMinHeight(undefined, 'RECURSIVE')).toBe(1);
|
|
1102
1084
|
});
|
|
1103
1085
|
|
|
1104
|
-
it('should check if the
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1086
|
+
it('should check if the binTree is a binary search binTree', () => {
|
|
1087
|
+
binTree.add([5, 'A']);
|
|
1088
|
+
binTree.add([3, 'B']);
|
|
1089
|
+
binTree.add([7, 'C']);
|
|
1108
1090
|
|
|
1109
|
-
expect(
|
|
1091
|
+
expect(binTree.isBST()).toBe(true);
|
|
1110
1092
|
});
|
|
1111
1093
|
|
|
1112
1094
|
it('should perform a depth-first traversal', () => {
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1095
|
+
binTree.add([5, 'A']);
|
|
1096
|
+
binTree.add([3, 'B']);
|
|
1097
|
+
binTree.add([7, 'C']);
|
|
1116
1098
|
|
|
1117
|
-
const result =
|
|
1099
|
+
const result = binTree.dfs();
|
|
1118
1100
|
expect(result).toEqual([3, 5, 7]);
|
|
1119
1101
|
// Add assertions for the result of depth-first traversal
|
|
1120
1102
|
});
|
|
1121
1103
|
|
|
1122
1104
|
it('should perform a breadth-first traversal', () => {
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1105
|
+
binTree.add([5, 'A']);
|
|
1106
|
+
binTree.add([3, 'B']);
|
|
1107
|
+
binTree.add([7, 'C']);
|
|
1126
1108
|
|
|
1127
|
-
const result =
|
|
1109
|
+
const result = binTree.bfs(node => node.key);
|
|
1128
1110
|
expect(result).toEqual([5, 3, 7]);
|
|
1129
1111
|
// Add assertions for the result of breadth-first traversal
|
|
1130
1112
|
});
|
|
1131
1113
|
|
|
1132
|
-
it('should list levels of the
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1114
|
+
it('should list levels of the binTree', () => {
|
|
1115
|
+
binTree.add([5, 'A']);
|
|
1116
|
+
binTree.add([3, 'B']);
|
|
1117
|
+
binTree.add([7, 'C']);
|
|
1136
1118
|
|
|
1137
|
-
const levels =
|
|
1119
|
+
const levels = binTree.listLevels();
|
|
1138
1120
|
expect(levels).toEqual([[5], [3, 7]]);
|
|
1139
|
-
// Add assertions for the levels of the
|
|
1121
|
+
// Add assertions for the levels of the binTree
|
|
1140
1122
|
});
|
|
1141
1123
|
|
|
1142
|
-
it('should delete nodes from the
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1124
|
+
it('should delete nodes from the binTree', () => {
|
|
1125
|
+
binTree.add([5, 'A']);
|
|
1126
|
+
binTree.add([3, 'B']);
|
|
1127
|
+
binTree.add([7, 'C']);
|
|
1146
1128
|
|
|
1147
|
-
|
|
1129
|
+
binTree.delete(3);
|
|
1148
1130
|
|
|
1149
|
-
expect(
|
|
1150
|
-
expect(
|
|
1131
|
+
expect(binTree.size).toBe(2);
|
|
1132
|
+
expect(binTree.getNode(3)).toBe(undefined);
|
|
1151
1133
|
});
|
|
1152
1134
|
|
|
1153
1135
|
it('should getPathToRoot', () => {
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1136
|
+
binTree.add([5, 'A']);
|
|
1137
|
+
binTree.add([3, 'B']);
|
|
1138
|
+
binTree.add([7, 'C']);
|
|
1157
1139
|
|
|
1158
|
-
expect(
|
|
1159
|
-
expect(
|
|
1140
|
+
expect(binTree.getPathToRoot(7)).toEqual([7, 5]);
|
|
1141
|
+
expect(binTree.getPathToRoot(1)).toEqual([]);
|
|
1160
1142
|
});
|
|
1161
1143
|
|
|
1162
|
-
it('should check if the
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1144
|
+
it('should check if the binTree is perfectly balanced', () => {
|
|
1145
|
+
binTree.add([5, 'A']);
|
|
1146
|
+
binTree.add([3, 'B']);
|
|
1147
|
+
binTree.add([7, 'C']);
|
|
1166
1148
|
|
|
1167
|
-
expect(
|
|
1149
|
+
expect(binTree.isPerfectlyBalanced()).toBe(true);
|
|
1168
1150
|
});
|
|
1169
1151
|
|
|
1170
1152
|
it('should get nodes by a custom callback', () => {
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
const nodes =
|
|
1153
|
+
binTree.add([5, 'E']);
|
|
1154
|
+
binTree.add([4, 'D']);
|
|
1155
|
+
binTree.add([3, 'C']);
|
|
1156
|
+
binTree.add([7, 'G']);
|
|
1157
|
+
binTree.add([null, 'null']);
|
|
1158
|
+
binTree.add([1, 'A']);
|
|
1159
|
+
binTree.add([6, 'F']);
|
|
1160
|
+
binTree.add([null, 'null']);
|
|
1161
|
+
binTree.add([2, 'B']);
|
|
1162
|
+
binTree.add([null, 'null']);
|
|
1163
|
+
|
|
1164
|
+
const nodes = binTree.getNodes(node => node.key === 2);
|
|
1183
1165
|
|
|
1184
1166
|
expect(nodes.length).toBe(1);
|
|
1185
1167
|
expect(nodes[0].key).toBe(2);
|
|
1186
1168
|
|
|
1187
|
-
const nodesRec =
|
|
1169
|
+
const nodesRec = binTree.getNodes(node => node.key === 2, false, binTree.root, 'RECURSIVE');
|
|
1188
1170
|
|
|
1189
1171
|
expect(nodesRec.length).toBe(1);
|
|
1190
1172
|
expect(nodesRec[0].key).toBe(2);
|
|
1191
1173
|
|
|
1192
|
-
const nodesItr =
|
|
1174
|
+
const nodesItr = binTree.getNodes(node => node.key === 2, false, binTree.root, 'ITERATIVE');
|
|
1193
1175
|
|
|
1194
1176
|
expect(nodesItr.length).toBe(1);
|
|
1195
1177
|
expect(nodesItr[0].key).toBe(2);
|
|
@@ -1198,75 +1180,75 @@ describe('BinaryTree', () => {
|
|
|
1198
1180
|
});
|
|
1199
1181
|
|
|
1200
1182
|
it('should perform Morris traversal', () => {
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1183
|
+
binTree.add([5, 'A']);
|
|
1184
|
+
binTree.add([3, 'B']);
|
|
1185
|
+
binTree.add([7, 'C']);
|
|
1204
1186
|
|
|
1205
|
-
|
|
1206
|
-
expect([...
|
|
1187
|
+
binTree.iterationType = 'ITERATIVE';
|
|
1188
|
+
expect([...binTree]).toEqual([
|
|
1207
1189
|
[3, 'B'],
|
|
1208
1190
|
[5, 'A'],
|
|
1209
1191
|
[7, 'C']
|
|
1210
1192
|
]);
|
|
1211
|
-
|
|
1212
|
-
expect([...
|
|
1193
|
+
binTree.iterationType = 'RECURSIVE';
|
|
1194
|
+
expect([...binTree]).toEqual([
|
|
1213
1195
|
[3, 'B'],
|
|
1214
1196
|
[5, 'A'],
|
|
1215
1197
|
[7, 'C']
|
|
1216
1198
|
]);
|
|
1217
|
-
|
|
1199
|
+
binTree.iterationType = 'ITERATIVE';
|
|
1218
1200
|
|
|
1219
|
-
const result =
|
|
1201
|
+
const result = binTree.morris();
|
|
1220
1202
|
expect(result).toEqual([3, 5, 7]);
|
|
1221
|
-
|
|
1222
|
-
expect(
|
|
1203
|
+
binTree.clear();
|
|
1204
|
+
expect(binTree.morris()).toEqual([]);
|
|
1223
1205
|
});
|
|
1224
1206
|
|
|
1225
1207
|
it('should perform delete all', () => {
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1208
|
+
binTree.add([5, 'A']);
|
|
1209
|
+
binTree.add([3, 'B']);
|
|
1210
|
+
binTree.add([7, 'C']);
|
|
1229
1211
|
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
expect(
|
|
1234
|
-
expect(
|
|
1212
|
+
binTree.delete(5);
|
|
1213
|
+
binTree.delete(7);
|
|
1214
|
+
binTree.delete(3);
|
|
1215
|
+
expect(binTree.root).toBe(undefined);
|
|
1216
|
+
expect(binTree.getHeight()).toBe(-1);
|
|
1235
1217
|
});
|
|
1236
1218
|
});
|
|
1237
1219
|
|
|
1238
1220
|
describe('BinaryTree not map mode', () => {
|
|
1239
|
-
let
|
|
1221
|
+
let binTree: BinaryTree<number, string>;
|
|
1240
1222
|
|
|
1241
1223
|
beforeEach(() => {
|
|
1242
|
-
|
|
1224
|
+
binTree = new BinaryTree<number, string>([], {
|
|
1243
1225
|
iterationType: 'RECURSIVE',
|
|
1244
1226
|
isMapMode: false
|
|
1245
1227
|
});
|
|
1246
1228
|
});
|
|
1247
1229
|
|
|
1248
1230
|
afterEach(() => {
|
|
1249
|
-
|
|
1231
|
+
binTree.clear();
|
|
1250
1232
|
});
|
|
1251
1233
|
|
|
1252
1234
|
it('should add and find nodes', () => {
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1235
|
+
binTree.add([1, '1']);
|
|
1236
|
+
binTree.add(undefined);
|
|
1237
|
+
binTree.add([2, '2']);
|
|
1238
|
+
binTree.add([3, '3']);
|
|
1257
1239
|
|
|
1258
|
-
expect(
|
|
1259
|
-
expect(
|
|
1260
|
-
expect(
|
|
1261
|
-
expect(
|
|
1262
|
-
const node4 =
|
|
1263
|
-
expect(
|
|
1264
|
-
expect(
|
|
1265
|
-
expect(
|
|
1240
|
+
expect(binTree.has(1)).toBe(true);
|
|
1241
|
+
expect(binTree.has(2)).toBe(true);
|
|
1242
|
+
expect(binTree.has(3)).toBe(true);
|
|
1243
|
+
expect(binTree.has(4)).toBe(false);
|
|
1244
|
+
const node4 = binTree.getNode(4);
|
|
1245
|
+
expect(binTree.has(node4)).toBe(false);
|
|
1246
|
+
expect(binTree.has(node => node === node4)).toBe(false);
|
|
1247
|
+
expect(binTree.has(node => node.value?.toString() === '3')).toBe(true);
|
|
1266
1248
|
});
|
|
1267
1249
|
|
|
1268
1250
|
it('should isSubtreeBST', () => {
|
|
1269
|
-
|
|
1251
|
+
binTree.addMany([
|
|
1270
1252
|
new BinaryTreeNode(4),
|
|
1271
1253
|
new BinaryTreeNode(2),
|
|
1272
1254
|
new BinaryTreeNode(6),
|
|
@@ -1277,47 +1259,47 @@ describe('BinaryTree not map mode', () => {
|
|
|
1277
1259
|
new BinaryTreeNode(4)
|
|
1278
1260
|
]);
|
|
1279
1261
|
|
|
1280
|
-
expect(
|
|
1281
|
-
expect(
|
|
1262
|
+
expect(binTree.isBST(binTree.getNode(4), 'RECURSIVE')).toBe(true);
|
|
1263
|
+
expect(binTree.isBST(binTree.getNode(4), 'ITERATIVE')).toBe(true);
|
|
1282
1264
|
});
|
|
1283
1265
|
|
|
1284
1266
|
it('should get nodes by key', () => {
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1267
|
+
binTree.add([5, 'A']);
|
|
1268
|
+
binTree.add([3, 'B']);
|
|
1269
|
+
binTree.add([7, 'C']);
|
|
1288
1270
|
|
|
1289
|
-
const nodeA =
|
|
1290
|
-
const nodeB =
|
|
1271
|
+
const nodeA = binTree.getNode(5);
|
|
1272
|
+
const nodeB = binTree.getNode(3);
|
|
1291
1273
|
|
|
1292
1274
|
expect(nodeA?.key).toBe(5);
|
|
1293
|
-
expect(
|
|
1275
|
+
expect(binTree.get(nodeA)).toBe('A');
|
|
1294
1276
|
expect(nodeB?.key).toBe(3);
|
|
1295
|
-
expect(
|
|
1277
|
+
expect(binTree.get(nodeB)).toBe('B');
|
|
1296
1278
|
});
|
|
1297
1279
|
|
|
1298
1280
|
it('should get nodes by a custom callback', () => {
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
const nodes =
|
|
1281
|
+
binTree.add([5, 'E']);
|
|
1282
|
+
binTree.add([4, 'D']);
|
|
1283
|
+
binTree.add([3, 'C']);
|
|
1284
|
+
binTree.add([7, 'G']);
|
|
1285
|
+
binTree.add([null, 'null']);
|
|
1286
|
+
binTree.add([1, 'A']);
|
|
1287
|
+
binTree.add([6, 'F']);
|
|
1288
|
+
binTree.add([null, 'null']);
|
|
1289
|
+
binTree.add([2, 'B']);
|
|
1290
|
+
binTree.add([null, 'null']);
|
|
1291
|
+
|
|
1292
|
+
const nodes = binTree.getNodes(node => node.key === 2);
|
|
1311
1293
|
|
|
1312
1294
|
expect(nodes.length).toBe(1);
|
|
1313
1295
|
expect(nodes[0].key).toBe(2);
|
|
1314
1296
|
|
|
1315
|
-
const nodesRec =
|
|
1297
|
+
const nodesRec = binTree.getNodes(node => node.key === 2, false, binTree.root, 'RECURSIVE');
|
|
1316
1298
|
|
|
1317
1299
|
expect(nodesRec.length).toBe(1);
|
|
1318
1300
|
expect(nodesRec[0].key).toBe(2);
|
|
1319
1301
|
|
|
1320
|
-
const nodesItr =
|
|
1302
|
+
const nodesItr = binTree.getNodes(node => node.key === 2, false, binTree.root, 'ITERATIVE');
|
|
1321
1303
|
|
|
1322
1304
|
expect(nodesItr.length).toBe(1);
|
|
1323
1305
|
expect(nodesItr[0].key).toBe(2);
|
|
@@ -1352,8 +1334,8 @@ describe('BinaryTree iterative methods test', () => {
|
|
|
1352
1334
|
expect(mockCallback.mock.calls[2]).toEqual([3, 'c']);
|
|
1353
1335
|
});
|
|
1354
1336
|
|
|
1355
|
-
it('filter should return a new
|
|
1356
|
-
const filteredTree = binaryTree.filter(
|
|
1337
|
+
it('filter should return a new binTree with filtered elements', () => {
|
|
1338
|
+
const filteredTree = binaryTree.filter(key => key > 1);
|
|
1357
1339
|
expect(filteredTree.size).toBe(2);
|
|
1358
1340
|
expect([...filteredTree]).toEqual([
|
|
1359
1341
|
[3, 'c'],
|
|
@@ -1361,7 +1343,7 @@ describe('BinaryTree iterative methods test', () => {
|
|
|
1361
1343
|
]);
|
|
1362
1344
|
});
|
|
1363
1345
|
|
|
1364
|
-
it('map should return a new
|
|
1346
|
+
it('map should return a new binTree with modified elements', () => {
|
|
1365
1347
|
const mappedTree = binaryTree.map((key, value) => [(key * 2).toString(), value]);
|
|
1366
1348
|
expect(mappedTree.size).toBe(3);
|
|
1367
1349
|
expect([...mappedTree]).toEqual([
|
|
@@ -1415,9 +1397,9 @@ describe('BinaryTree iterative methods test', () => {
|
|
|
1415
1397
|
});
|
|
1416
1398
|
|
|
1417
1399
|
it('should iterative method return undefined when the node is null', () => {
|
|
1418
|
-
const
|
|
1419
|
-
|
|
1420
|
-
const bfsResult =
|
|
1400
|
+
const binTree = new BinaryTree();
|
|
1401
|
+
binTree.addMany([-10, -10, -10, 9, 9, 20, null, null, 15, 7, 8, null, 2, null, 6, null, null, 8, 8, 8]);
|
|
1402
|
+
const bfsResult = binTree.bfs(undefined, undefined, undefined, true);
|
|
1421
1403
|
expect(bfsResult).toEqual([
|
|
1422
1404
|
-10,
|
|
1423
1405
|
9,
|