heap-typed 1.51.5 → 1.51.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +72 -80
  2. package/dist/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -12
  3. package/dist/data-structures/binary-tree/avl-tree-multi-map.js +2 -10
  4. package/dist/data-structures/binary-tree/avl-tree.d.ts +3 -3
  5. package/dist/data-structures/binary-tree/avl-tree.js +12 -14
  6. package/dist/data-structures/binary-tree/binary-tree.d.ts +7 -13
  7. package/dist/data-structures/binary-tree/binary-tree.js +46 -78
  8. package/dist/data-structures/binary-tree/bst.d.ts +51 -96
  9. package/dist/data-structures/binary-tree/bst.js +120 -218
  10. package/dist/data-structures/binary-tree/rb-tree.d.ts +3 -4
  11. package/dist/data-structures/binary-tree/rb-tree.js +4 -2
  12. package/dist/data-structures/binary-tree/tree-multi-map.d.ts +3 -4
  13. package/dist/data-structures/binary-tree/tree-multi-map.js +1 -0
  14. package/dist/data-structures/heap/heap.d.ts +1 -3
  15. package/dist/interfaces/binary-tree.d.ts +3 -3
  16. package/dist/types/common.d.ts +1 -1
  17. package/dist/types/data-structures/binary-tree/avl-tree-multi-map.d.ts +3 -2
  18. package/dist/types/data-structures/binary-tree/avl-tree.d.ts +3 -2
  19. package/dist/types/data-structures/binary-tree/binary-tree.d.ts +4 -4
  20. package/dist/types/data-structures/binary-tree/bst.d.ts +6 -5
  21. package/dist/types/data-structures/binary-tree/rb-tree.d.ts +4 -3
  22. package/dist/types/data-structures/binary-tree/tree-multi-map.d.ts +3 -2
  23. package/dist/types/utils/utils.d.ts +10 -1
  24. package/dist/utils/utils.d.ts +2 -1
  25. package/dist/utils/utils.js +29 -1
  26. package/package.json +2 -2
  27. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +5 -12
  28. package/src/data-structures/binary-tree/avl-tree.ts +15 -15
  29. package/src/data-structures/binary-tree/binary-tree.ts +56 -76
  30. package/src/data-structures/binary-tree/bst.ts +132 -224
  31. package/src/data-structures/binary-tree/rb-tree.ts +9 -6
  32. package/src/data-structures/binary-tree/tree-multi-map.ts +5 -3
  33. package/src/data-structures/heap/heap.ts +1 -1
  34. package/src/interfaces/binary-tree.ts +4 -3
  35. package/src/types/common.ts +1 -1
  36. package/src/types/data-structures/binary-tree/avl-tree-multi-map.ts +3 -2
  37. package/src/types/data-structures/binary-tree/avl-tree.ts +3 -2
  38. package/src/types/data-structures/binary-tree/binary-tree.ts +5 -5
  39. package/src/types/data-structures/binary-tree/bst.ts +6 -5
  40. package/src/types/data-structures/binary-tree/rb-tree.ts +4 -3
  41. package/src/types/data-structures/binary-tree/tree-multi-map.ts +3 -2
  42. package/src/types/utils/utils.ts +14 -1
  43. package/src/utils/utils.ts +20 -1
package/README.md CHANGED
@@ -45,8 +45,8 @@ Max Heap
45
45
  import {MinHeap, MaxHeap} from 'data-structure-typed';
46
46
  // /* or if you prefer */ import {MinHeap, MaxHeap} from 'heap-typed';
47
47
 
48
- const minNumHeap = new MinHeap<number>();
49
- minNumHeap.add(1).add(6).add(2).add(0).add(5).add(9);
48
+ const minNumHeap = new MinHeap<number>([1, 6, 2, 0, 5]);
49
+ minNumHeap.add(9);
50
50
  minNumHeap.has(1) // true
51
51
  minNumHeap.has(2) // true
52
52
  minNumHeap.poll() // 0
@@ -54,6 +54,7 @@ Max Heap
54
54
  minNumHeap.peek() // 2
55
55
  minNumHeap.has(1); // false
56
56
  minNumHeap.has(2); // true
57
+
57
58
  const arrFromHeap = minNumHeap.toArray();
58
59
  arrFromHeap.length // 4
59
60
  arrFromHeap[0] // 2
@@ -61,38 +62,33 @@ Max Heap
61
62
  arrFromHeap[2] // 9
62
63
  arrFromHeap[3] // 6
63
64
  minNumHeap.sort() // [2, 5, 6, 9]
65
+
66
+ const maxHeap = new MaxHeap<{ keyA: string }>([], {comparator: (a, b) => b.keyA - a.keyA});
67
+ const obj1 = {keyA: 'a1'}, obj6 = {keyA: 'a6'}, obj5 = {keyA: 'a5'}, obj2 = {keyA: 'a2'},
68
+ obj0 = {keyA: 'a0'}, obj9 = {keyA: 'a9'};
64
69
 
70
+ maxHeap.add(obj1);
71
+ maxHeap.has(obj1) // true
72
+ maxHeap.has(obj9) // false
73
+ maxHeap.add(obj6);
74
+ maxHeap.has(obj6) // true
75
+ maxHeap.add(obj5);
76
+ maxHeap.add(obj2);
77
+ maxHeap.add(obj0);
78
+ maxHeap.add(obj9);
79
+ maxHeap.has(obj9) // true
65
80
 
66
- const maxHeap = new MaxHeap<{ keyA: string }>();
67
- const myObj1 = {keyA: 'a1'}, myObj6 = {keyA: 'a6'}, myObj5 = {keyA: 'a5'}, myObj2 = {keyA: 'a2'},
68
- myObj0 = {keyA: 'a0'}, myObj9 = {keyA: 'a9'};
69
- maxHeap.add(1, myObj1);
70
- maxHeap.has(myObj1) // true
71
- maxHeap.has(myObj9) // false
72
- maxHeap.add(6, myObj6);
73
- maxHeap.has(myObj6) // true
74
- maxHeap.add(5, myObj5);
75
- maxHeap.has(myObj5) // true
76
- maxHeap.add(2, myObj2);
77
- maxHeap.has(myObj2) // true
78
- maxHeap.has(myObj6) // true
79
- maxHeap.add(0, myObj0);
80
- maxHeap.has(myObj0) // true
81
- maxHeap.has(myObj9) // false
82
- maxHeap.add(9, myObj9);
83
- maxHeap.has(myObj9) // true
84
-
85
- const peek9 = maxHeap.peek(true);
86
- peek9 && peek9.val && peek9.val.keyA // 'a9'
81
+ const peek9 = maxHeap.peek();
82
+ console.log(peek9.keyA) // 'a9'
87
83
 
88
- const heapToArr = maxHeap.toArray(true);
89
- heapToArr.map(item => item?.val?.keyA) // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
84
+ const heapToArr = maxHeap.toArray();
85
+ console.log(heapToArr.map(ele => ele?.keyA)); // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
90
86
 
91
87
  const values = ['a9', 'a6', 'a5', 'a2', 'a1', 'a0'];
92
88
  let i = 0;
93
89
  while (maxHeap.size > 0) {
94
- const polled = maxHeap.poll(true);
95
- polled && polled.val && polled.val.keyA // values[i]
90
+ const polled = maxHeap.poll();
91
+ console.log(polled.keyA) // values[i]
96
92
  i++;
97
93
  }
98
94
  ```
@@ -100,59 +96,55 @@ Max Heap
100
96
  #### JS
101
97
 
102
98
  ```javascript
103
- const {MinHeap, MaxHeap} = require('data-structure-typed');
104
- // /* or if you prefer */ const {MinHeap, MaxHeap} = require('heap-typed');
105
-
106
- const minNumHeap = new MinHeap();
107
- minNumHeap.add(1).add(6).add(2).add(0).add(5).add(9);
108
- minNumHeap.has(1) // true
109
- minNumHeap.has(2) // true
110
- minNumHeap.poll() // 0
111
- minNumHeap.poll() // 1
112
- minNumHeap.peek() // 2
113
- minNumHeap.has(1); // false
114
- minNumHeap.has(2); // true
115
- const arrFromHeap = minNumHeap.toArray();
116
- arrFromHeap.length // 4
117
- arrFromHeap[0] // 2
118
- arrFromHeap[1] // 5
119
- arrFromHeap[2] // 9
120
- arrFromHeap[3] // 6
121
- minNumHeap.sort() // [2, 5, 6, 9]
122
-
123
-
124
- const maxHeap = new MaxHeap();
125
- const myObj1 = {keyA: 'a1'}, myObj6 = {keyA: 'a6'}, myObj5 = {keyA: 'a5'}, myObj2 = {keyA: 'a2'},
126
- myObj0 = {keyA: 'a0'}, myObj9 = {keyA: 'a9'};
127
- maxHeap.add(1, myObj1);
128
- maxHeap.has(myObj1) // true
129
- maxHeap.has(myObj9) // false
130
- maxHeap.add(6, myObj6);
131
- maxHeap.has(myObj6) // true
132
- maxHeap.add(5, myObj5);
133
- maxHeap.has(myObj5) // true
134
- maxHeap.add(2, myObj2);
135
- maxHeap.has(myObj2) // true
136
- maxHeap.has(myObj6) // true
137
- maxHeap.add(0, myObj0);
138
- maxHeap.has(myObj0) // true
139
- maxHeap.has(myObj9) // false
140
- maxHeap.add(9, myObj9);
141
- maxHeap.has(myObj9) // true
142
-
143
- const peek9 = maxHeap.peek(true);
144
- peek9 && peek9.val && peek9.val.keyA // 'a9'
145
-
146
- const heapToArr = maxHeap.toArray(true);
147
- heapToArr.map(item => item?.val?.keyA) // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
148
-
149
- const values = ['a9', 'a6', 'a5', 'a2', 'a1', 'a0'];
150
- let i = 0;
151
- while (maxHeap.size > 0) {
152
- const polled = maxHeap.poll(true);
153
- polled && polled.val && polled.val.keyA // values[i]
154
- i++;
155
- }
99
+ const {MinHeap, MaxHeap} = require('data-structure-typed');
100
+ // /* or if you prefer */ const {MinHeap, MaxHeap} = require('heap-typed');
101
+
102
+ const minNumHeap = new MinHeap([1, 6, 2, 0, 5]);
103
+ minNumHeap.add(9);
104
+ minNumHeap.has(1) // true
105
+ minNumHeap.has(2) // true
106
+ minNumHeap.poll() // 0
107
+ minNumHeap.poll() // 1
108
+ minNumHeap.peek() // 2
109
+ minNumHeap.has(1); // false
110
+ minNumHeap.has(2); // true
111
+
112
+ const arrFromHeap = minNumHeap.toArray();
113
+ arrFromHeap.length // 4
114
+ arrFromHeap[0] // 2
115
+ arrFromHeap[1] // 5
116
+ arrFromHeap[2] // 9
117
+ arrFromHeap[3] // 6
118
+ minNumHeap.sort() // [2, 5, 6, 9]
119
+
120
+ const maxHeap = new MaxHeap([], {comparator: (a, b) => b.keyA - a.keyA});
121
+ const obj1 = {keyA: 'a1'}, obj6 = {keyA: 'a6'}, obj5 = {keyA: 'a5'}, obj2 = {keyA: 'a2'},
122
+ obj0 = {keyA: 'a0'}, obj9 = {keyA: 'a9'};
123
+
124
+ maxHeap.add(obj1);
125
+ maxHeap.has(obj1) // true
126
+ maxHeap.has(obj9) // false
127
+ maxHeap.add(obj6);
128
+ maxHeap.has(obj6) // true
129
+ maxHeap.add(obj5);
130
+ maxHeap.add(obj2);
131
+ maxHeap.add(obj0);
132
+ maxHeap.add(obj9);
133
+ maxHeap.has(obj9) // true
134
+
135
+ const peek9 = maxHeap.peek();
136
+ console.log(peek9.keyA) // 'a9'
137
+
138
+ const heapToArr = maxHeap.toArray();
139
+ console.log(heapToArr.map(ele => ele?.keyA)); // ['a9', 'a2', 'a6', 'a1', 'a0', 'a5']
140
+
141
+ const values = ['a9', 'a6', 'a5', 'a2', 'a1', 'a0'];
142
+ let i = 0;
143
+ while (maxHeap.size > 0) {
144
+ const polled = maxHeap.poll();
145
+ console.log(polled.keyA) // values[i]
146
+ i++;
147
+ }
156
148
  ```
157
149
 
158
150
 
@@ -5,10 +5,10 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { AVLTreeMultiMapNested, AVLTreeMultiMapNodeNested, AVLTreeMultiMapOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, IterationType, KeyOrNodeOrEntry } from '../../types';
8
+ import type { AVLTreeMultiMapNested, AVLTreeMultiMapNodeNested, AVLTreeMultiMapOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, Comparable, IterationType, KeyOrNodeOrEntry } from '../../types';
9
9
  import { IBinaryTree } from '../../interfaces';
10
10
  import { AVLTree, AVLTreeNode } from './avl-tree';
11
- export declare class AVLTreeMultiMapNode<K = any, V = any, NODE extends AVLTreeMultiMapNode<K, V, NODE> = AVLTreeMultiMapNodeNested<K, V>> extends AVLTreeNode<K, V, NODE> {
11
+ export declare class AVLTreeMultiMapNode<K extends Comparable, V = any, NODE extends AVLTreeMultiMapNode<K, V, NODE> = AVLTreeMultiMapNodeNested<K, V>> extends AVLTreeNode<K, V, NODE> {
12
12
  /**
13
13
  * The constructor function initializes a BinaryTreeNode object with a key, value, and count.
14
14
  * @param {K} key - The `key` parameter is of type `K` and represents the unique identifier
@@ -36,7 +36,7 @@ export declare class AVLTreeMultiMapNode<K = any, V = any, NODE extends AVLTreeM
36
36
  /**
37
37
  * The only distinction between a AVLTreeMultiMap and a AVLTree lies in the ability of the former to store duplicate nodes through the utilization of counters.
38
38
  */
39
- export declare class AVLTreeMultiMap<K = any, V = any, NODE extends AVLTreeMultiMapNode<K, V, NODE> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNodeNested<K, V>>, TREE extends AVLTreeMultiMap<K, V, NODE, TREE> = AVLTreeMultiMap<K, V, NODE, AVLTreeMultiMapNested<K, V, NODE>>> extends AVLTree<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
39
+ export declare class AVLTreeMultiMap<K extends Comparable, V = any, NODE extends AVLTreeMultiMapNode<K, V, NODE> = AVLTreeMultiMapNode<K, V, AVLTreeMultiMapNodeNested<K, V>>, TREE extends AVLTreeMultiMap<K, V, NODE, TREE> = AVLTreeMultiMap<K, V, NODE, AVLTreeMultiMapNested<K, V, NODE>>> extends AVLTree<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
40
40
  constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: AVLTreeMultiMapOptions<K>);
41
41
  protected _count: number;
42
42
  /**
@@ -68,15 +68,6 @@ export declare class AVLTreeMultiMap<K = any, V = any, NODE extends AVLTreeMulti
68
68
  * @returns A new instance of the BSTNode class with the specified key, value, and count (if provided).
69
69
  */
70
70
  createNode(key: K, value?: V, count?: number): NODE;
71
- /**
72
- * The function creates a new AVLTreeMultiMap object with the specified options and returns it.
73
- * @param [options] - The `options` parameter is an optional object that contains additional
74
- * configuration options for creating the `AVLTreeMultiMap` object. It can include properties such as
75
- * `iterationType` and `variant`, which are used to specify the type of iteration and the variant of
76
- * the tree, respectively. These properties can be
77
- * @returns a new instance of the `AVLTreeMultiMap` class, with the provided options merged with the
78
- * default options. The returned value is casted as `TREE`.
79
- */
80
71
  createTree(options?: AVLTreeMultiMapOptions<K>): TREE;
81
72
  /**
82
73
  * The function `keyValueOrEntryToNode` converts an keyOrNodeOrEntry object into a node object.
@@ -83,17 +83,8 @@ class AVLTreeMultiMap extends avl_tree_1.AVLTree {
83
83
  createNode(key, value, count) {
84
84
  return new AVLTreeMultiMapNode(key, value, count);
85
85
  }
86
- /**
87
- * The function creates a new AVLTreeMultiMap object with the specified options and returns it.
88
- * @param [options] - The `options` parameter is an optional object that contains additional
89
- * configuration options for creating the `AVLTreeMultiMap` object. It can include properties such as
90
- * `iterationType` and `variant`, which are used to specify the type of iteration and the variant of
91
- * the tree, respectively. These properties can be
92
- * @returns a new instance of the `AVLTreeMultiMap` class, with the provided options merged with the
93
- * default options. The returned value is casted as `TREE`.
94
- */
95
86
  createTree(options) {
96
- return new AVLTreeMultiMap([], Object.assign({ iterationType: this.iterationType, variant: this.variant }, options));
87
+ return new AVLTreeMultiMap([], Object.assign({ iterationType: this.iterationType, comparator: this.comparator }, options));
97
88
  }
98
89
  /**
99
90
  * The function `keyValueOrEntryToNode` converts an keyOrNodeOrEntry object into a node object.
@@ -199,6 +190,7 @@ class AVLTreeMultiMap extends avl_tree_1.AVLTree {
199
190
  const deletedResult = [];
200
191
  if (!this.root)
201
192
  return deletedResult;
193
+ callback = this._ensureCallback(identifier, callback);
202
194
  const curr = (_a = this.getNode(identifier, callback)) !== null && _a !== void 0 ? _a : undefined;
203
195
  if (!curr)
204
196
  return deletedResult;
@@ -6,9 +6,9 @@
6
6
  * @license MIT License
7
7
  */
8
8
  import { BST, BSTNode } from './bst';
9
- import type { AVLTreeNested, AVLTreeNodeNested, AVLTreeOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, KeyOrNodeOrEntry } from '../../types';
9
+ import type { AVLTreeNested, AVLTreeNodeNested, AVLTreeOptions, BinaryTreeDeleteResult, BSTNKeyOrNode, BTNCallback, Comparable, KeyOrNodeOrEntry } from '../../types';
10
10
  import { IBinaryTree } from '../../interfaces';
11
- export declare class AVLTreeNode<K = any, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNodeNested<K, V>> extends BSTNode<K, V, NODE> {
11
+ export declare class AVLTreeNode<K extends Comparable, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNodeNested<K, V>> extends BSTNode<K, V, NODE> {
12
12
  /**
13
13
  * The constructor function initializes a new instance of a class with a key and an optional value,
14
14
  * and sets the height property to 0.
@@ -40,7 +40,7 @@ export declare class AVLTreeNode<K = any, V = any, NODE extends AVLTreeNode<K, V
40
40
  * 6. Complex Insertions and Deletions: Due to rebalancing, these operations are more complex than in a regular BST.
41
41
  * 7. Path Length: The path length from the root to any leaf is longer compared to an unbalanced BST, but shorter than a linear chain of nodes.
42
42
  */
43
- export declare class AVLTree<K = any, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNode<K, V, AVLTreeNodeNested<K, V>>, TREE extends AVLTree<K, V, NODE, TREE> = AVLTree<K, V, NODE, AVLTreeNested<K, V, NODE>>> extends BST<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
43
+ export declare class AVLTree<K extends Comparable, V = any, NODE extends AVLTreeNode<K, V, NODE> = AVLTreeNode<K, V, AVLTreeNodeNested<K, V>>, TREE extends AVLTree<K, V, NODE, TREE> = AVLTree<K, V, NODE, AVLTreeNested<K, V, NODE>>> extends BST<K, V, NODE, TREE> implements IBinaryTree<K, V, NODE, TREE> {
44
44
  /**
45
45
  * The constructor function initializes an AVLTree object with optional keysOrNodesOrEntries and options.
46
46
  * @param [keysOrNodesOrEntries] - The `keysOrNodesOrEntries` parameter is an optional iterable of `KeyOrNodeOrEntry<K, V, NODE>`
@@ -83,7 +83,7 @@ class AVLTree extends bst_1.BST {
83
83
  * @returns a new AVLTree object.
84
84
  */
85
85
  createTree(options) {
86
- return new AVLTree([], Object.assign({ iterationType: this.iterationType, variant: this.variant }, options));
86
+ return new AVLTree([], Object.assign({ iterationType: this.iterationType, comparator: this.comparator }, options));
87
87
  }
88
88
  /**
89
89
  * The function checks if an keyOrNodeOrEntry is an instance of AVLTreeNode.
@@ -138,8 +138,6 @@ class AVLTree extends bst_1.BST {
138
138
  * @returns The method is returning an array of `BinaryTreeDeleteResult<NODE>`.
139
139
  */
140
140
  delete(identifier, callback = this._DEFAULT_CALLBACK) {
141
- if (identifier instanceof AVLTreeNode)
142
- callback = (node => node);
143
141
  const deletedResults = super.delete(identifier, callback);
144
142
  for (const { needBalanced } of deletedResults) {
145
143
  if (needBalanced) {
@@ -159,21 +157,21 @@ class AVLTree extends bst_1.BST {
159
157
  * if either `srcNode` or `destNode` is undefined.
160
158
  */
161
159
  _swapProperties(srcNode, destNode) {
162
- srcNode = this.ensureNode(srcNode);
163
- destNode = this.ensureNode(destNode);
164
- if (srcNode && destNode) {
165
- const { key, value, height } = destNode;
160
+ const srcNodeEnsured = this.ensureNode(srcNode);
161
+ const destNodeEnsured = this.ensureNode(destNode);
162
+ if (srcNodeEnsured && destNodeEnsured) {
163
+ const { key, value, height } = destNodeEnsured;
166
164
  const tempNode = this.createNode(key, value);
167
165
  if (tempNode) {
168
166
  tempNode.height = height;
169
- destNode.key = srcNode.key;
170
- destNode.value = srcNode.value;
171
- destNode.height = srcNode.height;
172
- srcNode.key = tempNode.key;
173
- srcNode.value = tempNode.value;
174
- srcNode.height = tempNode.height;
167
+ destNodeEnsured.key = srcNodeEnsured.key;
168
+ destNodeEnsured.value = srcNodeEnsured.value;
169
+ destNodeEnsured.height = srcNodeEnsured.height;
170
+ srcNodeEnsured.key = tempNode.key;
171
+ srcNodeEnsured.value = tempNode.value;
172
+ srcNodeEnsured.height = tempNode.height;
175
173
  }
176
- return destNode;
174
+ return destNodeEnsured;
177
175
  }
178
176
  return undefined;
179
177
  }
@@ -5,8 +5,7 @@
5
5
  * @copyright Copyright (c) 2022 Tyler Zeng <zrwusa@gmail.com>
6
6
  * @license MIT License
7
7
  */
8
- import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BinaryTreePrintOptions, BTNCallback, BTNEntry, DFSOrderPattern, EntryCallback, KeyOrNodeOrEntry, NodeDisplayLayout } from '../../types';
9
- import { FamilyPosition, IterationType } from '../../types';
8
+ import type { BinaryTreeDeleteResult, BinaryTreeNested, BinaryTreeNodeNested, BinaryTreeOptions, BinaryTreePrintOptions, BTNCallback, BTNEntry, Comparable, DFSOrderPattern, EntryCallback, FamilyPosition, IterationType, KeyOrNodeOrEntry, NodeDisplayLayout } from '../../types';
10
9
  import { IBinaryTree } from '../../interfaces';
11
10
  import { IterableEntryBase } from '../base';
12
11
  /**
@@ -14,7 +13,7 @@ import { IterableEntryBase } from '../base';
14
13
  * @template V - The type of data stored in the node.
15
14
  * @template NODE - The type of the family relationship in the binary tree.
16
15
  */
17
- export declare class BinaryTreeNode<K = any, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>> {
16
+ export declare class BinaryTreeNode<K extends Comparable, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>> {
18
17
  key: K;
19
18
  value?: V;
20
19
  parent?: NODE;
@@ -66,7 +65,7 @@ export declare class BinaryTreeNode<K = any, V = any, NODE extends BinaryTreeNod
66
65
  * 4. Subtrees: Each child of a node forms the root of a subtree.
67
66
  * 5. Leaf Nodes: Nodes without children are leaves.
68
67
  */
69
- export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>, TREE extends BinaryTree<K, V, NODE, TREE> = BinaryTree<K, V, NODE, BinaryTreeNested<K, V, NODE>>> extends IterableEntryBase<K, V | undefined> implements IBinaryTree<K, V, NODE, TREE> {
68
+ export declare class BinaryTree<K extends Comparable, V = any, NODE extends BinaryTreeNode<K, V, NODE> = BinaryTreeNode<K, V, BinaryTreeNodeNested<K, V>>, TREE extends BinaryTree<K, V, NODE, TREE> = BinaryTree<K, V, NODE, BinaryTreeNested<K, V, NODE>>> extends IterableEntryBase<K, V | undefined> implements IBinaryTree<K, V, NODE, TREE> {
70
69
  iterationType: IterationType;
71
70
  /**
72
71
  * The constructor function initializes a binary tree object with optional keysOrNodesOrEntries and options.
@@ -77,13 +76,7 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
77
76
  * `Partial<BinaryTreeOptions>`, which means that not all properties of `BinaryTreeOptions` are
78
77
  * required.
79
78
  */
80
- constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: BinaryTreeOptions<K>);
81
- protected _extractor: (key: K) => number;
82
- /**
83
- * The function returns the value of the `_extractor` property.
84
- * @returns The `_extractor` property is being returned.
85
- */
86
- get extractor(): (key: K) => number;
79
+ constructor(keysOrNodesOrEntries?: Iterable<KeyOrNodeOrEntry<K, V, NODE>>, options?: BinaryTreeOptions);
87
80
  protected _root?: NODE | null;
88
81
  /**
89
82
  * The function returns the root node, which can be of type NODE, null, or undefined.
@@ -117,7 +110,7 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
117
110
  * you can provide only a subset of the properties defined in the `BinaryTreeOptions` interface.
118
111
  * @returns a new instance of a binary tree.
119
112
  */
120
- createTree(options?: Partial<BinaryTreeOptions<K>>): TREE;
113
+ createTree(options?: Partial<BinaryTreeOptions>): TREE;
121
114
  /**
122
115
  * The function `keyValueOrEntryToNode` converts an keyOrNodeOrEntry object into a node object.
123
116
  * @param keyOrNodeOrEntry - The `keyOrNodeOrEntry` parameter is of type `KeyOrNodeOrEntry<K, V, NODE>`.
@@ -254,7 +247,7 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
254
247
  * @returns The function `getNodeByKey` returns a node (`NODE`) if a node with the specified key is
255
248
  * found in the binary tree. If no node is found, it returns `undefined`.
256
249
  */
257
- getNodeByKey(key: K, iterationType?: IterationType): NODE | undefined;
250
+ getNodeByKey(key: K, iterationType?: IterationType): NODE | null | undefined;
258
251
  get<C extends BTNCallback<NODE, K>>(identifier: K, callback?: C, beginRoot?: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): V | undefined;
259
252
  get<C extends BTNCallback<NODE, NODE>>(identifier: NODE | null | undefined, callback?: C, beginRoot?: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): V | undefined;
260
253
  get<C extends BTNCallback<NODE>>(identifier: ReturnType<C>, callback: C, beginRoot?: KeyOrNodeOrEntry<K, V, NODE>, iterationType?: IterationType): V | undefined;
@@ -606,4 +599,5 @@ export declare class BinaryTree<K = any, V = any, NODE extends BinaryTreeNode<K,
606
599
  * type `NODE` or `null`.
607
600
  */
608
601
  protected _setRoot(v: NODE | null | undefined): void;
602
+ protected _ensureCallback<C extends BTNCallback<NODE>>(identifier: ReturnType<C> | null | undefined, callback?: C): C;
609
603
  }