data-structure-typed 1.54.1 → 1.54.3

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 (113) hide show
  1. package/CHANGELOG.md +1 -1
  2. package/LICENSE +2 -2
  3. package/README.md +14 -1
  4. package/README_zh-CN.md +1 -1
  5. package/benchmark/report.html +4 -1
  6. package/benchmark/report.json +76 -17
  7. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  8. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js +8 -7
  9. package/dist/cjs/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  10. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
  11. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js +2 -2
  12. package/dist/cjs/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  13. package/dist/cjs/data-structures/binary-tree/avl-tree.d.ts +25 -21
  14. package/dist/cjs/data-structures/binary-tree/avl-tree.js +12 -8
  15. package/dist/cjs/data-structures/binary-tree/avl-tree.js.map +1 -1
  16. package/dist/cjs/data-structures/binary-tree/binary-tree.d.ts +111 -225
  17. package/dist/cjs/data-structures/binary-tree/binary-tree.js +177 -144
  18. package/dist/cjs/data-structures/binary-tree/binary-tree.js.map +1 -1
  19. package/dist/cjs/data-structures/binary-tree/bst.d.ts +59 -53
  20. package/dist/cjs/data-structures/binary-tree/bst.js +75 -119
  21. package/dist/cjs/data-structures/binary-tree/bst.js.map +1 -1
  22. package/dist/cjs/data-structures/binary-tree/red-black-tree.d.ts +18 -18
  23. package/dist/cjs/data-structures/binary-tree/red-black-tree.js +6 -6
  24. package/dist/cjs/data-structures/binary-tree/red-black-tree.js.map +1 -1
  25. package/dist/cjs/data-structures/binary-tree/tree-counter.d.ts +19 -19
  26. package/dist/cjs/data-structures/binary-tree/tree-counter.js +12 -12
  27. package/dist/cjs/data-structures/binary-tree/tree-counter.js.map +1 -1
  28. package/dist/cjs/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  29. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js +2 -2
  30. package/dist/cjs/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  31. package/dist/cjs/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  32. package/dist/cjs/types/data-structures/binary-tree/bst.d.ts +1 -1
  33. package/dist/cjs/types/data-structures/binary-tree/index.d.ts +1 -1
  34. package/dist/cjs/types/data-structures/binary-tree/index.js +1 -1
  35. package/dist/cjs/types/data-structures/binary-tree/index.js.map +1 -1
  36. package/dist/cjs/types/data-structures/binary-tree/{rb-tree.js → red-black-tree.js} +1 -1
  37. package/dist/cjs/types/data-structures/binary-tree/red-black-tree.js.map +1 -0
  38. package/dist/cjs/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  39. package/dist/cjs/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  40. package/dist/cjs/utils/utils.d.ts +2 -2
  41. package/dist/esm/data-structures/binary-tree/avl-tree-counter.d.ts +21 -20
  42. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js +9 -8
  43. package/dist/esm/data-structures/binary-tree/avl-tree-counter.js.map +1 -1
  44. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.d.ts +12 -12
  45. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js +3 -3
  46. package/dist/esm/data-structures/binary-tree/avl-tree-multi-map.js.map +1 -1
  47. package/dist/esm/data-structures/binary-tree/avl-tree.d.ts +25 -21
  48. package/dist/esm/data-structures/binary-tree/avl-tree.js +13 -9
  49. package/dist/esm/data-structures/binary-tree/avl-tree.js.map +1 -1
  50. package/dist/esm/data-structures/binary-tree/binary-tree.d.ts +111 -225
  51. package/dist/esm/data-structures/binary-tree/binary-tree.js +181 -148
  52. package/dist/esm/data-structures/binary-tree/binary-tree.js.map +1 -1
  53. package/dist/esm/data-structures/binary-tree/bst.d.ts +59 -53
  54. package/dist/esm/data-structures/binary-tree/bst.js +76 -120
  55. package/dist/esm/data-structures/binary-tree/bst.js.map +1 -1
  56. package/dist/esm/data-structures/binary-tree/red-black-tree.d.ts +18 -18
  57. package/dist/esm/data-structures/binary-tree/red-black-tree.js +7 -7
  58. package/dist/esm/data-structures/binary-tree/red-black-tree.js.map +1 -1
  59. package/dist/esm/data-structures/binary-tree/tree-counter.d.ts +19 -19
  60. package/dist/esm/data-structures/binary-tree/tree-counter.js +13 -13
  61. package/dist/esm/data-structures/binary-tree/tree-counter.js.map +1 -1
  62. package/dist/esm/data-structures/binary-tree/tree-multi-map.d.ts +12 -12
  63. package/dist/esm/data-structures/binary-tree/tree-multi-map.js +3 -3
  64. package/dist/esm/data-structures/binary-tree/tree-multi-map.js.map +1 -1
  65. package/dist/esm/types/data-structures/binary-tree/binary-tree.d.ts +1 -0
  66. package/dist/esm/types/data-structures/binary-tree/bst.d.ts +1 -1
  67. package/dist/esm/types/data-structures/binary-tree/index.d.ts +1 -1
  68. package/dist/esm/types/data-structures/binary-tree/index.js +1 -1
  69. package/dist/esm/types/data-structures/binary-tree/index.js.map +1 -1
  70. package/dist/esm/types/data-structures/binary-tree/red-black-tree.js +2 -0
  71. package/dist/esm/types/data-structures/binary-tree/red-black-tree.js.map +1 -0
  72. package/dist/esm/types/data-structures/binary-tree/tree-counter.d.ts +1 -1
  73. package/dist/esm/types/data-structures/binary-tree/tree-multi-map.d.ts +1 -1
  74. package/dist/esm/utils/utils.d.ts +2 -2
  75. package/dist/umd/data-structure-typed.js +296 -279
  76. package/dist/umd/data-structure-typed.min.js +5 -12
  77. package/dist/umd/data-structure-typed.min.js.map +1 -1
  78. package/package.json +9 -14
  79. package/src/data-structures/binary-tree/avl-tree-counter.ts +30 -23
  80. package/src/data-structures/binary-tree/avl-tree-multi-map.ts +25 -15
  81. package/src/data-structures/binary-tree/avl-tree.ts +35 -29
  82. package/src/data-structures/binary-tree/binary-tree.ts +469 -252
  83. package/src/data-structures/binary-tree/bst.ts +141 -143
  84. package/src/data-structures/binary-tree/red-black-tree.ts +27 -35
  85. package/src/data-structures/binary-tree/tree-counter.ts +33 -27
  86. package/src/data-structures/binary-tree/tree-multi-map.ts +25 -17
  87. package/src/types/data-structures/binary-tree/binary-tree.ts +1 -0
  88. package/src/types/data-structures/binary-tree/bst.ts +1 -1
  89. package/src/types/data-structures/binary-tree/index.ts +1 -1
  90. package/src/types/data-structures/binary-tree/tree-counter.ts +1 -1
  91. package/src/types/data-structures/binary-tree/tree-multi-map.ts +1 -1
  92. package/src/utils/utils.ts +2 -2
  93. package/test/integration/compile.mjs +135 -0
  94. package/test/performance/data-structures/binary-tree/avl-tree.test.mjs +71 -0
  95. package/test/performance/data-structures/binary-tree/red-black-tree.test.mjs +81 -0
  96. package/test/performance/reportor.mjs +505 -0
  97. package/test/performance/reportor.ts +1 -1
  98. package/test/unit/data-structures/binary-tree/avl-tree-counter.test.ts +7 -7
  99. package/test/unit/data-structures/binary-tree/avl-tree-multi-map.test.ts +5 -6
  100. package/test/unit/data-structures/binary-tree/avl-tree.test.ts +72 -5
  101. package/test/unit/data-structures/binary-tree/binary-tree.test.ts +132 -82
  102. package/test/unit/data-structures/binary-tree/bst.test.ts +12 -12
  103. package/test/unit/data-structures/binary-tree/red-black-tree.test.ts +4 -12
  104. package/test/unit/data-structures/binary-tree/tree-counter.test.ts +4 -4
  105. package/test/unit/data-structures/binary-tree/tree-multi-map.test.ts +6 -6
  106. package/test/utils/json2html.ts +0 -154
  107. package/dist/cjs/types/data-structures/binary-tree/rb-tree.js.map +0 -1
  108. package/dist/esm/types/data-structures/binary-tree/rb-tree.js +0 -2
  109. package/dist/esm/types/data-structures/binary-tree/rb-tree.js.map +0 -1
  110. /package/dist/cjs/types/data-structures/binary-tree/{rb-tree.d.ts → red-black-tree.d.ts} +0 -0
  111. /package/dist/esm/types/data-structures/binary-tree/{rb-tree.d.ts → red-black-tree.d.ts} +0 -0
  112. /package/src/types/data-structures/binary-tree/{rb-tree.ts → red-black-tree.ts} +0 -0
  113. /package/test/performance/data-structures/binary-tree/{rb-tree.test.ts → red-black-tree.test.ts} +0 -0
@@ -91,7 +91,7 @@ describe('AVLTreeCounter operations test1', () => {
91
91
  expect(minNodeBySpecificNode?.key).toBe(15);
92
92
 
93
93
  let subTreeSum = 0;
94
- if (node15) avlCounter.dfs(node => (subTreeSum += node.key), 'PRE', 15);
94
+ if (node15) avlCounter.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
95
95
  expect(subTreeSum).toBe(31);
96
96
  let lesserSum = 0;
97
97
  avlCounter.lesserOrGreaterTraverse((node: AVLTreeCounterNode<number>) => (lesserSum += node.key), -1, 10);
@@ -99,7 +99,7 @@ describe('AVLTreeCounter operations test1', () => {
99
99
 
100
100
  expect(node15 instanceof AVLTreeCounterNode);
101
101
  if (node15 instanceof AVLTreeCounterNode) {
102
- const subTreeAdd = avlCounter.dfs(node => (node.count += 1), 'PRE', 15);
102
+ const subTreeAdd = avlCounter.dfs(node => (node.count += 1), 'PRE', false, 15);
103
103
  expect(subTreeAdd);
104
104
  }
105
105
  const node11 = avlCounter.getNode(11);
@@ -347,7 +347,7 @@ describe('AVLTreeCounter operations test recursively1', () => {
347
347
  expect(minNodeBySpecificNode?.key).toBe(15);
348
348
 
349
349
  let subTreeSum = 0;
350
- if (node15) avlCounter.dfs(node => (subTreeSum += node.key), 'PRE', 15);
350
+ if (node15) avlCounter.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
351
351
  expect(subTreeSum).toBe(31);
352
352
  let lesserSum = 0;
353
353
  avlCounter.lesserOrGreaterTraverse((node: AVLTreeCounterNode<number>) => (lesserSum += node.key), -1, 10);
@@ -355,7 +355,7 @@ describe('AVLTreeCounter operations test recursively1', () => {
355
355
 
356
356
  expect(node15 instanceof AVLTreeCounterNode);
357
357
  if (node15 instanceof AVLTreeCounterNode) {
358
- const subTreeAdd = avlCounter.dfs(node => (node.count += 1), 'PRE', 15);
358
+ const subTreeAdd = avlCounter.dfs(node => (node.count += 1), 'PRE', false, 15);
359
359
  expect(subTreeAdd);
360
360
  }
361
361
  const node11 = avlCounter.getNode(11);
@@ -709,7 +709,7 @@ describe('AVLTreeCounter toEntryFn', () => {
709
709
 
710
710
  expect(avlCounter.morris(node => node.key, 'IN')).toEqual(expected);
711
711
  expect(avlCounter.dfs(node => node.key, 'IN')).toEqual(expected);
712
- expect(avlCounter.dfs(node => node.key, 'IN', avlCounter.root, 'RECURSIVE')).toEqual(expected);
712
+ expect(avlCounter.dfs(node => node.key, 'IN', false, avlCounter.root, 'RECURSIVE')).toEqual(expected);
713
713
  });
714
714
 
715
715
  it('should toEntryFn 2', () => {
@@ -724,7 +724,7 @@ describe('AVLTreeCounter toEntryFn', () => {
724
724
 
725
725
  expect(avlCounter.morris(node => node.key, 'IN')).toEqual(expected);
726
726
  expect(avlCounter.dfs(node => node.key, 'IN')).toEqual(expected);
727
- expect(avlCounter.dfs(node => node.key, 'IN', avlCounter.root, 'RECURSIVE')).toEqual(expected);
727
+ expect(avlCounter.dfs(node => node.key, 'IN', false, avlCounter.root, 'RECURSIVE')).toEqual(expected);
728
728
  });
729
729
 
730
730
  it('should toEntryFn throw error', () => {
@@ -760,7 +760,7 @@ describe('AVLTreeCounter toEntryFn', () => {
760
760
 
761
761
  expect(avlCounter.morris(node => node.key, 'IN')).toEqual(expected);
762
762
  expect(avlCounter.dfs(node => node.key, 'IN')).toEqual(expected);
763
- expect(avlCounter.dfs(node => node.key, 'IN', avlCounter.root, 'RECURSIVE')).toEqual(expected);
763
+ expect(avlCounter.dfs(node => node.key, 'IN', false, avlCounter.root, 'RECURSIVE')).toEqual(expected);
764
764
  });
765
765
  });
766
766
 
@@ -50,7 +50,7 @@ describe('AVLTreeMultiMap Test', () => {
50
50
  expect(getMinNodeBySpecificNode?.key).toBe(12);
51
51
 
52
52
  let subTreeSum = 0;
53
- if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', node15);
53
+ if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
54
54
  expect(subTreeSum).toBe(70);
55
55
 
56
56
  let lesserSum = 0;
@@ -176,7 +176,7 @@ describe('AVLTreeMultiMap Test recursively', () => {
176
176
  expect(getMinNodeBySpecificNode?.key).toBe(12);
177
177
 
178
178
  let subTreeSum = 0;
179
- if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', node15);
179
+ if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
180
180
  expect(subTreeSum).toBe(70);
181
181
 
182
182
  let lesserSum = 0;
@@ -435,7 +435,7 @@ describe('AVLTreeMultiMap iterative methods test', () => {
435
435
  });
436
436
 
437
437
  it('map should return a new avlTmm with modified elements', () => {
438
- const avlTmmMapped = avlTmm.map((key, value) => [(key * 2).toString(), value ? value :[]]);
438
+ const avlTmmMapped = avlTmm.map((key, value) => [(key * 2).toString(), value ? value : []]);
439
439
  expect(avlTmmMapped.size).toBe(3);
440
440
  expect([...avlTmmMapped]).toEqual([
441
441
  ['2', ['a']],
@@ -509,7 +509,7 @@ describe('AVLTreeMultiMap not map mode', () => {
509
509
  expect(getMinNodeBySpecificNode?.key).toBe(12);
510
510
 
511
511
  let subTreeSum = 0;
512
- if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', node15);
512
+ if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
513
513
  expect(subTreeSum).toBe(70);
514
514
 
515
515
  let lesserSum = 0;
@@ -527,7 +527,6 @@ describe('AVLTreeMultiMap not map mode test recursively', () => {
527
527
  const avlTmm = new AVLTreeMultiMap<number>([], { iterationType: 'RECURSIVE' });
528
528
 
529
529
  for (const i of arr) avlTmm.add([i, [i]]);
530
-
531
530
  const node6 = avlTmm.getNode(6);
532
531
 
533
532
  expect(node6 && avlTmm.getHeight(node6)).toBe(3);
@@ -544,7 +543,7 @@ describe('AVLTreeMultiMap not map mode test recursively', () => {
544
543
  expect(getMinNodeBySpecificNode?.key).toBe(12);
545
544
 
546
545
  let subTreeSum = 0;
547
- if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', node15);
546
+ if (node15) avlTmm.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
548
547
  expect(subTreeSum).toBe(70);
549
548
 
550
549
  let lesserSum = 0;
@@ -1,4 +1,4 @@
1
- import { AVLTree, AVLTreeNode, BinaryTreeNode, BSTNode } from '../../../../src';
1
+ import { AVLTree, AVLTreeNode, BinaryTreeNode, BSTNode, Range } from '../../../../src';
2
2
 
3
3
  describe('AVL Tree Test', () => {
4
4
  it('should perform various operations on a AVL Tree', () => {
@@ -24,7 +24,7 @@ describe('AVL Tree Test', () => {
24
24
  expect(getMinNodeBySpecificNode?.key).toBe(12);
25
25
 
26
26
  let subTreeSum = 0;
27
- if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
27
+ if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
28
28
  expect(subTreeSum).toBe(70);
29
29
 
30
30
  let lesserSum = 0;
@@ -150,7 +150,7 @@ describe('AVL Tree Test recursively', () => {
150
150
  expect(getMinNodeBySpecificNode?.key).toBe(12);
151
151
 
152
152
  let subTreeSum = 0;
153
- if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
153
+ if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
154
154
  expect(subTreeSum).toBe(70);
155
155
 
156
156
  let lesserSum = 0;
@@ -480,7 +480,7 @@ describe('AVL Tree not map mode', () => {
480
480
  expect(getMinNodeBySpecificNode?.key).toBe(12);
481
481
 
482
482
  let subTreeSum = 0;
483
- if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
483
+ if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
484
484
  expect(subTreeSum).toBe(70);
485
485
 
486
486
  let lesserSum = 0;
@@ -515,7 +515,7 @@ describe('AVL Tree not map mode test recursively', () => {
515
515
  expect(getMinNodeBySpecificNode?.key).toBe(12);
516
516
 
517
517
  let subTreeSum = 0;
518
- if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', node15);
518
+ if (node15) avlTree.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
519
519
  expect(subTreeSum).toBe(70);
520
520
 
521
521
  let lesserSum = 0;
@@ -542,3 +542,70 @@ describe('AVLTree iterative methods not map mode', () => {
542
542
  expect(cloned.get(cloned.root?.right?.key)).toBe('c');
543
543
  });
544
544
  });
545
+
546
+ describe('classic use', () => {
547
+ // Test case for finding elements in a given range
548
+ it('@example Find elements in a range', () => {
549
+ type Datum = { timestamp: Date; temperature: number };
550
+ // Fixed dataset of CPU temperature readings
551
+ const cpuData: Datum[] = [
552
+ { timestamp: new Date('2024-12-02T00:00:00'), temperature: 55.1 },
553
+ { timestamp: new Date('2024-12-02T00:01:00'), temperature: 56.3 },
554
+ { timestamp: new Date('2024-12-02T00:02:00'), temperature: 54.8 },
555
+ { timestamp: new Date('2024-12-02T00:03:00'), temperature: 57.2 },
556
+ { timestamp: new Date('2024-12-02T00:04:00'), temperature: 58.0 },
557
+ { timestamp: new Date('2024-12-02T00:05:00'), temperature: 59.4 },
558
+ { timestamp: new Date('2024-12-02T00:06:00'), temperature: 60.1 },
559
+ { timestamp: new Date('2024-12-02T00:07:00'), temperature: 61.3 },
560
+ { timestamp: new Date('2024-12-02T00:08:00'), temperature: 62.0 },
561
+ { timestamp: new Date('2024-12-02T00:09:00'), temperature: 63.5 },
562
+ { timestamp: new Date('2024-12-02T00:10:00'), temperature: 64.0 },
563
+ { timestamp: new Date('2024-12-02T00:11:00'), temperature: 62.8 },
564
+ { timestamp: new Date('2024-12-02T00:12:00'), temperature: 61.5 },
565
+ { timestamp: new Date('2024-12-02T00:13:00'), temperature: 60.2 },
566
+ { timestamp: new Date('2024-12-02T00:14:00'), temperature: 59.8 },
567
+ { timestamp: new Date('2024-12-02T00:15:00'), temperature: 58.6 },
568
+ { timestamp: new Date('2024-12-02T00:16:00'), temperature: 57.4 },
569
+ { timestamp: new Date('2024-12-02T00:17:00'), temperature: 56.2 },
570
+ { timestamp: new Date('2024-12-02T00:18:00'), temperature: 55.7 },
571
+ { timestamp: new Date('2024-12-02T00:19:00'), temperature: 54.5 },
572
+ { timestamp: new Date('2024-12-02T00:20:00'), temperature: 53.2 },
573
+ { timestamp: new Date('2024-12-02T00:21:00'), temperature: 52.8 },
574
+ { timestamp: new Date('2024-12-02T00:22:00'), temperature: 51.9 },
575
+ { timestamp: new Date('2024-12-02T00:23:00'), temperature: 50.5 },
576
+ { timestamp: new Date('2024-12-02T00:24:00'), temperature: 49.8 },
577
+ { timestamp: new Date('2024-12-02T00:25:00'), temperature: 48.7 },
578
+ { timestamp: new Date('2024-12-02T00:26:00'), temperature: 47.5 },
579
+ { timestamp: new Date('2024-12-02T00:27:00'), temperature: 46.3 },
580
+ { timestamp: new Date('2024-12-02T00:28:00'), temperature: 45.9 },
581
+ { timestamp: new Date('2024-12-02T00:29:00'), temperature: 45.0 }
582
+ ];
583
+
584
+ // Create an AVL tree to store CPU temperature data
585
+ const cpuTemperatureTree = new AVLTree<Date, number, Datum>(cpuData, {
586
+ toEntryFn: ({ timestamp, temperature }) => [timestamp, temperature]
587
+ });
588
+
589
+ // Query a specific time range (e.g., from 00:05 to 00:15)
590
+ const rangeStart = new Date('2024-12-02T00:05:00');
591
+ const rangeEnd = new Date('2024-12-02T00:15:00');
592
+ const rangeResults = cpuTemperatureTree.rangeSearch([rangeStart, rangeEnd], node => ({
593
+ minute: node ? node.key.getMinutes() : 0,
594
+ temperature: cpuTemperatureTree.get(node ? node.key : undefined)
595
+ }));
596
+
597
+ expect(rangeResults).toEqual( [
598
+ { minute: 5, temperature: 59.4 },
599
+ { minute: 6, temperature: 60.1 },
600
+ { minute: 7, temperature: 61.3 },
601
+ { minute: 8, temperature: 62 },
602
+ { minute: 9, temperature: 63.5 },
603
+ { minute: 10, temperature: 64 },
604
+ { minute: 11, temperature: 62.8 },
605
+ { minute: 12, temperature: 61.5 },
606
+ { minute: 13, temperature: 60.2 },
607
+ { minute: 14, temperature: 59.8 },
608
+ { minute: 15, temperature: 58.6 }
609
+ ]);
610
+ });
611
+ });
@@ -217,20 +217,20 @@ describe('BinaryTree', () => {
217
217
  expect(cloned.root?.right?.key).toBe(6);
218
218
  expect(cloned.root?.right?.left?.key).toBe(3);
219
219
  expect(cloned.root?.right?.right).toBe(null);
220
- expect(cloned.dfs(node => node.key, 'PRE', cloned.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
221
- expect(cloned.dfs(node => (node ? node.key : null), 'PRE', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
220
+ expect(cloned.dfs(node => node.key, 'PRE', false, cloned.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
221
+ expect(cloned.dfs(node => (node ? node.key : null), 'PRE', false, cloned.getNode(6), 'ITERATIVE', true)).toEqual([
222
222
  6,
223
223
  3,
224
224
  7,
225
225
  null
226
226
  ]);
227
- expect(cloned.dfs(node => (node ? node.key : node), 'PRE', cloned.getNode(6), 'ITERATIVE', true)).toEqual([
227
+ expect(cloned.dfs(node => (node ? node.key : node), 'PRE', false, cloned.getNode(6), 'ITERATIVE', true)).toEqual([
228
228
  6,
229
229
  3,
230
230
  7,
231
231
  null
232
232
  ]);
233
- expect(cloned.dfs(node => (node ? node.key : null), 'PRE', cloned.getNode(6), 'RECURSIVE', true)).toEqual([
233
+ expect(cloned.dfs(node => (node ? node.key : null), 'PRE', false, cloned.getNode(6), 'RECURSIVE', true)).toEqual([
234
234
  6,
235
235
  3,
236
236
  7,
@@ -532,11 +532,11 @@ describe('BinaryTree', () => {
532
532
  expect(binTree.dfs()).toEqual([]);
533
533
  expect([...binTree.values()]).toEqual([]);
534
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([
537
- 4, 2, 1, 5, 6, 3, 7
538
- ]);
539
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'ITERATIVE', true)).toEqual([
535
+ expect(binTree.dfs(node => node.key, 'PRE', false, undefined, 'ITERATIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
536
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'ITERATIVE', false)).toEqual(
537
+ [4, 2, 1, 5, 6, 3, 7]
538
+ );
539
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'ITERATIVE', true)).toEqual([
540
540
  4,
541
541
  2,
542
542
  null,
@@ -549,11 +549,11 @@ describe('BinaryTree', () => {
549
549
  null
550
550
  ]);
551
551
 
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([
554
- 4, 2, 1, 5, 6, 3, 7
555
- ]);
556
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', undefined, 'RECURSIVE', true)).toEqual([
552
+ expect(binTree.dfs(node => node.key, 'PRE', false, undefined, 'RECURSIVE')).toEqual([4, 2, 1, 5, 6, 3, 7]);
553
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'RECURSIVE', false)).toEqual(
554
+ [4, 2, 1, 5, 6, 3, 7]
555
+ );
556
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, undefined, 'RECURSIVE', true)).toEqual([
557
557
  4,
558
558
  2,
559
559
  null,
@@ -566,11 +566,11 @@ describe('BinaryTree', () => {
566
566
  null
567
567
  ]);
568
568
 
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([
569
+ expect(binTree.dfs(node => node.key, 'IN', false, undefined, 'ITERATIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
570
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'ITERATIVE', false)).toEqual([
571
571
  2, 5, 1, 4, 7, 3, 6
572
572
  ]);
573
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'ITERATIVE', true)).toEqual([
573
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'ITERATIVE', true)).toEqual([
574
574
  null,
575
575
  2,
576
576
  5,
@@ -583,11 +583,11 @@ describe('BinaryTree', () => {
583
583
  null
584
584
  ]);
585
585
 
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([
586
+ expect(binTree.dfs(node => node.key, 'IN', false, undefined, 'RECURSIVE')).toEqual([2, 5, 1, 4, 7, 3, 6]);
587
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'RECURSIVE', false)).toEqual([
588
588
  2, 5, 1, 4, 7, 3, 6
589
589
  ]);
590
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', undefined, 'RECURSIVE', true)).toEqual([
590
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, undefined, 'RECURSIVE', true)).toEqual([
591
591
  null,
592
592
  2,
593
593
  5,
@@ -600,89 +600,71 @@ describe('BinaryTree', () => {
600
600
  null
601
601
  ]);
602
602
 
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([
605
- 5, 1, 2, 7, 3, 6, 4
606
- ]);
607
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'ITERATIVE', true)).toEqual([
608
- null,
609
- 5,
610
- null,
611
- 1,
612
- 2,
613
- 7,
614
- 3,
615
- null,
616
- 6,
617
- 4
618
- ]);
603
+ expect(binTree.dfs(node => node.key, 'POST', false, undefined, 'ITERATIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
604
+ expect(
605
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'ITERATIVE', false)
606
+ ).toEqual([5, 1, 2, 7, 3, 6, 4]);
607
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'ITERATIVE', true)).toEqual(
608
+ [null, 5, null, 1, 2, 7, 3, null, 6, 4]
609
+ );
619
610
 
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([
622
- 5, 1, 2, 7, 3, 6, 4
623
- ]);
624
- expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', undefined, 'RECURSIVE', true)).toEqual([
625
- null,
626
- 5,
627
- null,
628
- 1,
629
- 2,
630
- 7,
631
- 3,
632
- null,
633
- 6,
634
- 4
635
- ]);
611
+ expect(binTree.dfs(node => node.key, 'POST', false, undefined, 'RECURSIVE')).toEqual([5, 1, 2, 7, 3, 6, 4]);
612
+ expect(
613
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'RECURSIVE', false)
614
+ ).toEqual([5, 1, 2, 7, 3, 6, 4]);
615
+ expect(binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, undefined, 'RECURSIVE', true)).toEqual(
616
+ [null, 5, null, 1, 2, 7, 3, null, 6, 4]
617
+ );
636
618
  });
637
619
 
638
620
  it('should sub binTree traverse', () => {
639
621
  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]);
622
+ expect(binTree.dfs(node => node.key, 'PRE', false, binTree.getNode(6), 'ITERATIVE')).toEqual([6, 3, 7]);
641
623
  expect(
642
- binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', false)
624
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'ITERATIVE', false)
643
625
  ).toEqual([6, 3, 7]);
644
626
  expect(
645
- binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'ITERATIVE', true)
627
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'ITERATIVE', true)
646
628
  ).toEqual([6, 3, 7, null]);
647
629
 
648
- expect(binTree.dfs(node => node.key, 'PRE', binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
630
+ expect(binTree.dfs(node => node.key, 'PRE', false, binTree.getNode(6), 'RECURSIVE')).toEqual([6, 3, 7]);
649
631
  expect(
650
- binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', false)
632
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'RECURSIVE', false)
651
633
  ).toEqual([6, 3, 7]);
652
634
  expect(
653
- binTree.dfs(node => (node !== null ? node.key : null), 'PRE', binTree.getNode(6), 'RECURSIVE', true)
635
+ binTree.dfs(node => (node !== null ? node.key : null), 'PRE', false, binTree.getNode(6), 'RECURSIVE', true)
654
636
  ).toEqual([6, 3, 7, null]);
655
637
 
656
- expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
638
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
657
639
  expect(
658
- binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'ITERATIVE', false)
640
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'ITERATIVE', false)
659
641
  ).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
- );
642
+ expect(
643
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'ITERATIVE', true)
644
+ ).toEqual([7, 3, 6, null]);
663
645
 
664
- expect(binTree.dfs(node => node.key, 'IN', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
646
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
665
647
  expect(
666
- binTree.dfs(node => (node !== null ? node.key : null), 'IN', binTree.getNode(6), 'RECURSIVE', false)
648
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'RECURSIVE', false)
667
649
  ).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
- );
650
+ expect(
651
+ binTree.dfs(node => (node !== null ? node.key : null), 'IN', false, binTree.getNode(6), 'RECURSIVE', true)
652
+ ).toEqual([7, 3, 6, null]);
671
653
 
672
- expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
654
+ expect(binTree.dfs(node => node.key, 'POST', false, binTree.getNode(6), 'ITERATIVE')).toEqual([7, 3, 6]);
673
655
  expect(
674
- binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', false)
656
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'ITERATIVE', false)
675
657
  ).toEqual([7, 3, 6]);
676
658
  expect(
677
- binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'ITERATIVE', true)
659
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'ITERATIVE', true)
678
660
  ).toEqual([7, 3, null, 6]);
679
661
 
680
- expect(binTree.dfs(node => node.key, 'POST', binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
662
+ expect(binTree.dfs(node => node.key, 'POST', false, binTree.getNode(6), 'RECURSIVE')).toEqual([7, 3, 6]);
681
663
  expect(
682
- binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', false)
664
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'RECURSIVE', false)
683
665
  ).toEqual([7, 3, 6]);
684
666
  expect(
685
- binTree.dfs(node => (node !== null ? node.key : null), 'POST', binTree.getNode(6), 'RECURSIVE', true)
667
+ binTree.dfs(node => (node !== null ? node.key : null), 'POST', false, binTree.getNode(6), 'RECURSIVE', true)
686
668
  ).toEqual([7, 3, null, 6]);
687
669
  });
688
670
 
@@ -814,7 +796,7 @@ describe('BinaryTree Morris Traversal', () => {
814
796
 
815
797
  expect(result).toEqual(expected);
816
798
  expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
817
- expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
799
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
818
800
  });
819
801
 
820
802
  it('should perform pre-order Morris traversal correctly as dfs traversal', () => {
@@ -875,7 +857,7 @@ describe('BinaryTree toEntryFn', () => {
875
857
 
876
858
  expect(binTree.morris(node => node.key, 'IN')).toEqual(expected);
877
859
  expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
878
- expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
860
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
879
861
  });
880
862
 
881
863
  it('should toEntryFn with initial', () => {
@@ -890,7 +872,7 @@ describe('BinaryTree toEntryFn', () => {
890
872
 
891
873
  expect(binTree.morris(node => node.key, 'IN')).toEqual(expected);
892
874
  expect(binTree.dfs(node => node.key, 'IN')).toEqual(expected);
893
- expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(expected);
875
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(expected);
894
876
  });
895
877
 
896
878
  it('should no toEntryFn', () => {
@@ -905,7 +887,7 @@ describe('BinaryTree toEntryFn', () => {
905
887
 
906
888
  expect(binTree.morris(node => node.key, 'IN')).toEqual(data.sort((a, b) => a.obj.id - b.obj.id));
907
889
  expect(binTree.dfs(node => node.key, 'IN')).toEqual(data);
908
- expect(binTree.dfs(node => node.key, 'IN', binTree.root, 'RECURSIVE')).toEqual(data);
890
+ expect(binTree.dfs(node => node.key, 'IN', false, binTree.root, 'RECURSIVE')).toEqual(data);
909
891
  });
910
892
  });
911
893
 
@@ -953,19 +935,21 @@ describe('BinaryTree traversals', () => {
953
935
  );
954
936
 
955
937
  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([
938
+ expect(binTree.dfs(node => node.key, 'PRE', false, binTree.root, 'RECURSIVE')).toEqual([
957
939
  35, 20, 15, 16, 29, 28, 30, 40, 50, 45, 55
958
940
  ]);
959
941
  expect(
960
- binTree.dfs(node => node, 'PRE', binTree.root, 'ITERATIVE', true).map(node => (node === null ? null : node.key))
942
+ binTree
943
+ .dfs(node => node, 'PRE', false, binTree.root, 'ITERATIVE', true)
944
+ .map(node => (node === null ? null : node.key))
961
945
  ).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
962
946
  expect(
963
- binTree.dfs(node => node, 'PRE', binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
947
+ binTree.dfs(node => node, 'PRE', false, binTree.root, 'RECURSIVE', true).map(node => (node ? node.key : null))
964
948
  ).toEqual([35, 20, 15, null, 16, 29, 28, 30, 40, null, 50, 45, 55]);
965
949
 
966
950
  expect(binTree.dfs(node => node.key, 'IN')).toEqual([15, 16, 20, 28, 29, 30, 35, 40, 45, 50, 55]);
967
951
  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([
952
+ expect(binTree.dfs(node => node.key, 'POST', false, binTree.root, 'RECURSIVE')).toEqual([
969
953
  16, 15, 28, 30, 29, 20, 45, 55, 50, 40, 35
970
954
  ]);
971
955
  expect(binTree.bfs(node => node.key, binTree.root, 'RECURSIVE')).toEqual([
@@ -1434,3 +1418,69 @@ describe('BinaryTree not map mode iterative methods test', () => {
1434
1418
  expect(cloned.get(cloned.root?.right)).toBe('c');
1435
1419
  });
1436
1420
  });
1421
+
1422
+ describe('classic use', () => {
1423
+ it('@example determine loan approval using a decision tree', () => {
1424
+ // Decision tree structure
1425
+ const loanDecisionTree = new BinaryTree<string>(
1426
+ ['stableIncome', 'goodCredit', 'Rejected', 'Approved', 'Rejected'],
1427
+ { isDuplicate: true }
1428
+ );
1429
+
1430
+ function determineLoanApproval(
1431
+ node?: BinaryTreeNode<string> | null,
1432
+ conditions?: { [key: string]: boolean }
1433
+ ): string {
1434
+ if (!node) throw new Error('Invalid node');
1435
+
1436
+ // If it's a leaf node, return the decision result
1437
+ if (!node.left && !node.right) return node.key;
1438
+
1439
+ // Check if a valid condition exists for the current node's key
1440
+ return conditions?.[node.key]
1441
+ ? determineLoanApproval(node.left, conditions)
1442
+ : determineLoanApproval(node.right, conditions);
1443
+ }
1444
+
1445
+ // Test case 1: Stable income and good credit score
1446
+ expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: true })).toBe('Approved');
1447
+
1448
+ // Test case 2: Stable income but poor credit score
1449
+ expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: true, goodCredit: false })).toBe('Rejected');
1450
+
1451
+ // Test case 3: No stable income
1452
+ expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: true })).toBe('Rejected');
1453
+
1454
+ // Test case 4: No stable income and poor credit score
1455
+ expect(determineLoanApproval(loanDecisionTree.root, { stableIncome: false, goodCredit: false })).toBe('Rejected');
1456
+ });
1457
+
1458
+ it('@example evaluate the arithmetic expression represented by the binary tree', () => {
1459
+ const expressionTree = new BinaryTree<number | string>(['+', 3, '*', null, null, 5, '-', null, null, 2, 8]);
1460
+
1461
+ function evaluate(node?: BinaryTreeNode<number | string> | null): number {
1462
+ if (!node) return 0;
1463
+
1464
+ if (typeof node.key === 'number') return node.key;
1465
+
1466
+ const leftValue = evaluate(node.left); // Evaluate the left subtree
1467
+ const rightValue = evaluate(node.right); // Evaluate the right subtree
1468
+
1469
+ // Perform the operation based on the current node's operator
1470
+ switch (node.key) {
1471
+ case '+':
1472
+ return leftValue + rightValue;
1473
+ case '-':
1474
+ return leftValue - rightValue;
1475
+ case '*':
1476
+ return leftValue * rightValue;
1477
+ case '/':
1478
+ return rightValue !== 0 ? leftValue / rightValue : 0; // Handle division by zero
1479
+ default:
1480
+ throw new Error(`Unsupported operator: ${node.key}`);
1481
+ }
1482
+ }
1483
+
1484
+ expect(evaluate(expressionTree.root)).toBe(-27);
1485
+ });
1486
+ });
@@ -90,7 +90,7 @@ describe('BST operations test', () => {
90
90
  expect(nodes.map(node => node.key)).toEqual([15]);
91
91
 
92
92
  let subTreeSum = 0;
93
- if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
93
+ if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
94
94
  expect(subTreeSum).toBe(70);
95
95
 
96
96
  let lesserSum = 0;
@@ -299,7 +299,7 @@ describe('BST operations test', () => {
299
299
  expect(minNodeBySpecificNode?.key).toBe(12);
300
300
 
301
301
  let subTreeSum = 0;
302
- if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
302
+ if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
303
303
  expect(subTreeSum).toBe(70);
304
304
 
305
305
  let lesserSum = 0;
@@ -492,7 +492,7 @@ describe('BST operations test', () => {
492
492
 
493
493
  it('should search in range', () => {
494
494
  const bst = new BST<number>([10, 5, 15, 3, 7, 12, 18]);
495
- expect(bst.rangeSearch([4, 12])).toEqual([10, 12, 5, 7]);
495
+ expect(bst.rangeSearch([4, 12])).toEqual([5, 7, 10, 12]);
496
496
  expect(() => bst.rangeSearch([12, 4])).toThrow('low must be less than or equal to high');
497
497
  expect(bst.rangeSearch([12, 12])).toEqual([12]);
498
498
  });
@@ -535,7 +535,7 @@ describe('BST operations test recursively', () => {
535
535
  expect(minNodeBySpecificNode?.key).toBe(12);
536
536
 
537
537
  let subTreeSum = 0;
538
- if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', 15);
538
+ if (node15) bst.dfs(node => (subTreeSum += node.key), 'PRE', false, 15);
539
539
  expect(subTreeSum).toBe(70);
540
540
 
541
541
  let lesserSum = 0;
@@ -742,7 +742,7 @@ describe('BST operations test recursively', () => {
742
742
  expect(minNodeBySpecificNode?.key).toBe(12);
743
743
 
744
744
  let subTreeSum = 0;
745
- if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', node15);
745
+ if (node15) objBST.dfs(node => (subTreeSum += node.key), 'PRE', false, node15);
746
746
  expect(subTreeSum).toBe(70);
747
747
 
748
748
  let lesserSum = 0;
@@ -1080,10 +1080,10 @@ describe('BST Performance test', function () {
1080
1080
  it('should dfs as sub tree traversal, null should be ignored', () => {
1081
1081
  const bst = new BST();
1082
1082
  bst.addMany([4, 2, 6, 1, 3, 5, 7]);
1083
- expect(bst.dfs(node => node.key, 'PRE', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
1084
- expect(bst.dfs(node => node.key, 'PRE', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
1085
- expect(bst.dfs(node => node?.key ?? undefined, 'PRE', bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
1086
- expect(bst.dfs(node => node?.key ?? undefined, 'PRE', bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
1083
+ expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
1084
+ expect(bst.dfs(node => node.key, 'PRE', false, bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
1085
+ expect(bst.dfs(node => node?.key ?? undefined, 'PRE', false, bst.getNode(6), 'ITERATIVE')).toEqual([6, 5, 7]);
1086
+ expect(bst.dfs(node => node?.key ?? undefined, 'PRE', false, bst.getNode(6), 'RECURSIVE')).toEqual([6, 5, 7]);
1087
1087
  });
1088
1088
  });
1089
1089
 
@@ -1565,9 +1565,9 @@ describe('classic use', () => {
1565
1565
  // Test case for finding elements in a given range
1566
1566
  it('@example Find elements in a range', () => {
1567
1567
  const bst = new BST<number>([10, 5, 15, 3, 7, 12, 18]);
1568
- expect(bst.search(new Range(5, 10))).toEqual([10, 5, 7]);
1569
- expect(bst.rangeSearch([4, 12], node => node.key.toString())).toEqual(['10', '12', '5', '7']);
1570
- expect(bst.search(new Range(4, 12, true, false))).toEqual([10, 5, 7]);
1568
+ expect(bst.search(new Range(5, 10))).toEqual([5, 7, 10]);
1569
+ expect(bst.rangeSearch([4, 12], node => node.key.toString())).toEqual(['5', '7', '10', '12']);
1570
+ expect(bst.search(new Range(4, 12, true, false))).toEqual([5, 7, 10]);
1571
1571
  expect(bst.rangeSearch([15, 20])).toEqual([15, 18]);
1572
1572
  expect(bst.search(new Range(15, 20, false))).toEqual([18]);
1573
1573
  });