Skip to content

Commit 8bf98cd

Browse files
🎨 refactor: Use flat export style.
1 parent 8fed652 commit 8bf98cd

39 files changed

+212
-162
lines changed

src/adt/Leaf.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import assert from 'assert';
2-
import {BLACK} from '../color/BLACK.js';
3-
import {Node} from './Node.js';
2+
import BLACK from '../color/BLACK.js';
3+
import Node from './Node.js';
44

55
/**
66
* A black leaf node.
77
*
88
* @class
99
* @param {Node} parent - The parent node in the tree.
1010
*/
11-
export function Leaf(parent) {
11+
export default function Leaf(parent) {
1212
assert(parent instanceof Node);
1313
/** @constant {number} The color of the node. */
1414
this._color = BLACK;

src/adt/Node.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Leaf} from './Leaf.js';
1+
import Leaf from './Leaf.js';
22

33
/**
44
* An internal node. This node can be red or black.
@@ -7,7 +7,7 @@ import {Leaf} from './Leaf.js';
77
* @param {number} color - The color of the node.
88
* @param {any} key - The key of the node.
99
*/
10-
export function Node(color, key) {
10+
export default function Node(color, key) {
1111
/** @member {number} The color of the node. */
1212
this._color = color;
1313
/** @member {Node|Leaf} The left child */

src/adt/RedBlackTree.js

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
import assert from 'assert';
2-
import {Node} from './Node.js';
3-
import {BLACK, RED} from '../color/index.js';
4-
import {predecessor} from '../family/predecessor.js';
5-
import {insert, insert_case2} from '../insertion/index.js';
6-
import {delete_one_child} from '../deletion/index.js';
7-
import {search} from '../search/index.js';
8-
import {inordertraversal, rangetraversal} from '../traversal/index.js';
2+
import Node from './Node.js';
3+
import BLACK from '../color/BLACK.js';
4+
import RED from '../color/RED.js';
5+
import predecessor from '../family/predecessor.js';
6+
import insert from '../insertion/insert.js';
7+
import insert_case2 from '../insertion/insert_case2.js';
8+
import delete_one_child from '../deletion/delete_one_child.js';
9+
import search from '../search/search.js';
10+
import inordertraversal from '../traversal/inordertraversal.js';
11+
import rangetraversal from '../traversal/rangetraversal.js';
912

1013
/**
1114
* A RedBlackTree with key-only nodes.
1215
*
1316
*/
14-
export class RedBlackTree {
17+
export default class RedBlackTree {
1518
/**
1619
* Constructs a new empty red-black tree.
1720
*

src/adt/index.js

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/color/BLACK.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
22
* Constant for black.
33
*/
4-
export const BLACK = 0;
4+
const BLACK = 0;
5+
export default BLACK;

src/color/RED.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
22
* Constant for red.
33
*/
4-
export const RED = 1;
4+
const RED = 1;
5+
export default RED;

src/color/index.js

Lines changed: 0 additions & 2 deletions
This file was deleted.

src/debug/debug.js renamed to src/debug/_debug.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
import assert from 'assert';
2-
import {Node} from '../adt/Node.js';
3-
import {Leaf} from '../adt/Leaf.js';
4-
import {BLACK} from '../color/BLACK.js';
2+
import Node from '../adt/Node.js';
3+
import Leaf from '../adt/Leaf.js';
4+
import BLACK from '../color/BLACK.js';
55

66
/**
77
* Builds a debug function from color handlers.
88
*
99
* @param {Object} colors The colors to use.
1010
* @returns {Function} The debug function.
1111
*/
12-
export const _debug = ({red, black}) => {
12+
const _debug = ({red, black}) => {
1313
/**
1414
* Recursively constructs a prettyprint string for the red-black tree rooted at
1515
* <code>root</code>.
@@ -33,3 +33,5 @@ export const _debug = ({red, black}) => {
3333

3434
return debug;
3535
};
36+
37+
export default _debug;

src/debug/index.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/deletion/delete_case1.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
import assert from 'assert';
2-
import {BLACK} from '../color/BLACK.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
5-
import {delete_case2} from './delete_case2.js';
2+
import BLACK from '../color/BLACK.js';
3+
import Node from '../adt/Node.js';
4+
import Leaf from '../adt/Leaf.js';
5+
import delete_case2 from './delete_case2.js';
66

77
/**
88
* Preconditions:
@@ -12,11 +12,13 @@ import {delete_case2} from './delete_case2.js';
1212
*
1313
* @param {Node|Leaf} n - The input node.
1414
*/
15-
export const delete_case1 = (n) => {
15+
const delete_case1 = (n) => {
1616
assert(n instanceof Node || n instanceof Leaf);
1717
assert(n._color === BLACK);
1818
// If n is the root, there is nothing to do:
1919
// - all paths go through n, and
2020
// - n is black.
2121
if (n.parent !== null) delete_case2(n);
2222
};
23+
24+
export default delete_case1;

src/deletion/delete_case2.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
11
import assert from 'assert';
2-
import {BLACK, RED} from '../color/index.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
5-
import {rotate_left, rotate_right} from '../rotate/index.js';
6-
import {sibling} from '../family/sibling.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
6+
import rotate_left from '../rotate/rotate_left.js';
7+
import rotate_right from '../rotate/rotate_right.js';
8+
import sibling from '../family/sibling.js';
79

8-
import {delete_case3} from './delete_case3.js';
9-
import {delete_case4} from './delete_case4.js';
10+
import delete_case3 from './delete_case3.js';
11+
import delete_case4 from './delete_case4.js';
1012

1113
/**
1214
* Preconditions:
@@ -17,7 +19,7 @@ import {delete_case4} from './delete_case4.js';
1719
*
1820
* @param {Node|Leaf} n - The input node.
1921
*/
20-
export const delete_case2 = (n) => {
22+
const delete_case2 = (n) => {
2123
assert(n instanceof Node || n instanceof Leaf);
2224
assert(n._color === BLACK);
2325
assert(n.parent !== null);
@@ -46,3 +48,5 @@ export const delete_case2 = (n) => {
4648
// Otherwise, go to case 3.
4749
else delete_case3(n);
4850
};
51+
52+
export default delete_case2;

src/deletion/delete_case3.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
import assert from 'assert';
2-
import {BLACK, RED} from '../color/index.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
5-
import {sibling} from '../family/sibling.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
6+
import sibling from '../family/sibling.js';
67

7-
import {delete_case1} from './delete_case1.js';
8-
import {delete_case4} from './delete_case4.js';
8+
import delete_case1 from './delete_case1.js';
9+
import delete_case4 from './delete_case4.js';
910

1011
/**
1112
* Preconditions:
@@ -17,7 +18,7 @@ import {delete_case4} from './delete_case4.js';
1718
*
1819
* @param {Node|Leaf} n - The input node.
1920
*/
20-
export const delete_case3 = (n) => {
21+
const delete_case3 = (n) => {
2122
assert(n instanceof Node || n instanceof Leaf);
2223
assert(n._color === BLACK);
2324
assert(n.parent !== null);
@@ -50,3 +51,5 @@ export const delete_case3 = (n) => {
5051
// Otherwise, go to case 4.
5152
else delete_case4(n);
5253
};
54+
55+
export default delete_case3;

src/deletion/delete_case4.js

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import assert from 'assert';
2-
import {BLACK, RED} from '../color/index.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
5-
import {sibling} from '../family/sibling.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
6+
import sibling from '../family/sibling.js';
67

7-
import {delete_case5} from './delete_case5.js';
8+
import delete_case5 from './delete_case5.js';
89

910
/**
1011
* Preconditions:
@@ -17,7 +18,7 @@ import {delete_case5} from './delete_case5.js';
1718
*
1819
* @param {Node|Leaf} n - The input node.
1920
*/
20-
export const delete_case4 = (n) => {
21+
const delete_case4 = (n) => {
2122
assert(n instanceof Node || n instanceof Leaf);
2223
assert(n._color === BLACK);
2324
assert(n.parent !== null);
@@ -55,3 +56,5 @@ export const delete_case4 = (n) => {
5556
// Otherwise, go to case 5.
5657
else delete_case5(n);
5758
};
59+
60+
export default delete_case4;

src/deletion/delete_case5.js

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import assert from 'assert';
2-
import {BLACK, RED} from '../color/index.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
5-
import {rotate_left, rotate_right} from '../rotate/index.js';
6-
import {sibling} from '../family/sibling.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
6+
import rotate_left from '../rotate/rotate_left.js';
7+
import rotate_right from '../rotate/rotate_right.js';
8+
import sibling from '../family/sibling.js';
79

8-
import {delete_case6} from './delete_case6.js';
10+
import delete_case6 from './delete_case6.js';
911

1012
/**
1113
* Preconditions:
@@ -18,7 +20,7 @@ import {delete_case6} from './delete_case6.js';
1820
*
1921
* @param {Node|Leaf} n - The input node.
2022
*/
21-
export const delete_case5 = (n) => {
23+
const delete_case5 = (n) => {
2224
assert(n instanceof Node || n instanceof Leaf);
2325
assert(n._color === BLACK);
2426
assert(n.parent !== null);
@@ -65,3 +67,5 @@ export const delete_case5 = (n) => {
6567

6668
delete_case6(n);
6769
};
70+
71+
export default delete_case5;

src/deletion/delete_case6.js

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import assert from 'assert';
2-
import {BLACK} from '../color/BLACK.js';
3-
import {RED} from '../color/RED.js';
4-
import {Node} from '../adt/Node.js';
5-
import {Leaf} from '../adt/Leaf.js';
6-
import {rotate_left, rotate_right} from '../rotate/index.js';
7-
import {sibling} from '../family/sibling.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
6+
import rotate_left from '../rotate/rotate_left.js';
7+
import rotate_right from '../rotate/rotate_right.js';
8+
import sibling from '../family/sibling.js';
89

910
/**
1011
* Preconditions:
@@ -18,7 +19,7 @@ import {sibling} from '../family/sibling.js';
1819
*
1920
* @param {Node|Leaf} n - The input node.
2021
*/
21-
export const delete_case6 = (n) => {
22+
const delete_case6 = (n) => {
2223
assert(n instanceof Node || n instanceof Leaf);
2324
assert(n._color === BLACK);
2425
assert(n.parent !== null);
@@ -60,3 +61,5 @@ export const delete_case6 = (n) => {
6061
rotate_right(n.parent);
6162
}
6263
};
64+
65+
export default delete_case6;

src/deletion/delete_one_child.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
import assert from 'assert';
2-
import {BLACK, RED} from '../color/index.js';
3-
import {Node} from '../adt/Node.js';
4-
import {Leaf} from '../adt/Leaf.js';
2+
import BLACK from '../color/BLACK.js';
3+
import RED from '../color/RED.js';
4+
import Node from '../adt/Node.js';
5+
import Leaf from '../adt/Leaf.js';
56

6-
import {replace_node} from './replace_node.js';
7-
import {delete_case1} from './delete_case1.js';
7+
import replace_node from './replace_node.js';
8+
import delete_case1 from './delete_case1.js';
89

910
/**
1011
* Delete a node <code>n</code> that has at most a single non-leaf child.
@@ -16,7 +17,7 @@ import {delete_case1} from './delete_case1.js';
1617
*
1718
* @param {Node} n - The node to delete.
1819
*/
19-
export const delete_one_child = (n) => {
20+
const delete_one_child = (n) => {
2021
assert(n instanceof Node);
2122
// Precondition: n's right child is a leaf.
2223
// The right child of n is always a LEAF because either n is a subtree
@@ -40,10 +41,11 @@ export const delete_one_child = (n) => {
4041
else {
4142
delete_case1(child);
4243
}
44+
} else {
45+
// If n is red then its child can only be black. Replacing n with its
46+
// child suffices. This is a NO-OP.
47+
assert(child._color === BLACK);
4348
}
44-
45-
// Else {
46-
// If n is red then its child can only be black. Replacing n with its
47-
// child suffices.
48-
// }
4949
};
50+
51+
export default delete_one_child;

src/deletion/index.js

Lines changed: 0 additions & 8 deletions
This file was deleted.

src/deletion/replace_node.js

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import assert from 'assert';
2-
import {Node} from '../adt/Node.js';
3-
import {Leaf} from '../adt/Leaf.js';
2+
import Node from '../adt/Node.js';
3+
import Leaf from '../adt/Leaf.js';
44

55
/**
66
* Replaces node <code>A</code> by node <code>B</code>.
77
*
88
* @param {Node} A - The node to replace.
99
* @param {Node|Leaf} B - The replacement node.
1010
*/
11-
export const replace_node = (A, B) => {
11+
const replace_node = (A, B) => {
1212
assert(A instanceof Node);
1313
assert(B instanceof Node || B instanceof Leaf);
1414
// We never apply delete_one_child on the root
@@ -19,3 +19,5 @@ export const replace_node = (A, B) => {
1919

2020
B.parent = A.parent;
2121
};
22+
23+
export default replace_node;

0 commit comments

Comments
 (0)