Skip to content

Commit 0423369

Browse files
committed
refactor 297
1 parent e5670bd commit 0423369

File tree

3 files changed

+31
-77
lines changed

3 files changed

+31
-77
lines changed

src/297.serializeBT/297.serializeBT.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
1818
*/
1919

20-
import { TreeNode, binaryTreeToString, arrayToBinaryTree } from "../_.general/binaryTree";
20+
import { binaryTreeToString, arrayToBinaryTree } from "../_.general/binaryTree";
2121

2222
export const serializeBT = {};
2323

src/297.serializeBT/297.serializeBT.spec.js

Lines changed: 16 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -2,71 +2,25 @@ import { arrayToBinaryTree, binaryTreeToArray } from "../_.general/binaryTree";
22
import { serializeBT } from "./297.serializeBT";
33

44
describe("# Problem 297 - serialize/deserialize BinaryTree.", () => {
5+
const testCases = [
6+
[],
7+
[1],
8+
[1, 2, null, 3],
9+
[3, null, 5, 4],
10+
[6, null, 8, 7, 9],
11+
[6, 2, 9, null, 4, 7, 10, 3]
12+
];
513
describe("Solution 1: Just convert it to string", () => {
6-
it("[]", () => {
7-
const array = [];
8-
const tree = arrayToBinaryTree(array);
14+
testCases.forEach((array) => {
15+
it(`should serialize and deserialize: ${array.toString()}`, () => {
16+
const tree = arrayToBinaryTree(array);
917

10-
const serializedTree = serializeBT.serialize(tree);
11-
expect(serializedTree).toEqual(jasmine.any(String));
18+
const serializedTree = serializeBT.serialize(tree);
19+
expect(serializedTree).toEqual(jasmine.any(String));
1220

13-
const result = serializeBT.deserialize(serializedTree);
14-
expect(binaryTreeToArray(result)).toEqual(array);
15-
});
16-
17-
it("[1]", () => {
18-
const array = [1];
19-
const tree = arrayToBinaryTree(array);
20-
21-
const serializedTree = serializeBT.serialize(tree);
22-
expect(serializedTree).toEqual(jasmine.any(String));
23-
24-
const result = serializeBT.deserialize(serializedTree);
25-
expect(binaryTreeToArray(result)).toEqual(array);
26-
});
27-
28-
it("[1, 2, null, 3]", () => {
29-
const array = [1, 2, null, 3];
30-
const tree = arrayToBinaryTree(array);
31-
32-
const serializedTree = serializeBT.serialize(tree);
33-
expect(serializedTree).toEqual(jasmine.any(String));
34-
35-
const result = serializeBT.deserialize(serializedTree);
36-
expect(binaryTreeToArray(result)).toEqual(array);
37-
});
38-
39-
it("[3, null, 5, 4]", () => {
40-
const array = [3, null, 5, 4];
41-
const tree = arrayToBinaryTree(array);
42-
43-
const serializedTree = serializeBT.serialize(tree);
44-
expect(serializedTree).toEqual(jasmine.any(String));
45-
46-
const result = serializeBT.deserialize(serializedTree);
47-
expect(binaryTreeToArray(result)).toEqual(array);
48-
});
49-
50-
it("[6, null, 8, 7, 9]", () => {
51-
const array = [6, null, 8, 7, 9];
52-
const tree = arrayToBinaryTree(array);
53-
54-
const serializedTree = serializeBT.serialize(tree);
55-
expect(serializedTree).toEqual(jasmine.any(String));
56-
57-
const result = serializeBT.deserialize(serializedTree);
58-
expect(binaryTreeToArray(result)).toEqual(array);
59-
});
60-
61-
it("[6, 2, 9, null, 4, 7, 10, 3]", () => {
62-
const array = [6, 2, 9, null, 4, 7, 10, 3];
63-
const tree = arrayToBinaryTree(array);
64-
65-
const serializedTree = serializeBT.serialize(tree);
66-
expect(serializedTree).toEqual(jasmine.any(String));
67-
68-
const result = serializeBT.deserialize(serializedTree);
69-
expect(binaryTreeToArray(result)).toEqual(array);
21+
const result = serializeBT.deserialize(serializedTree);
22+
expect(binaryTreeToArray(result)).toEqual(array);
23+
});
7024
});
7125
});
7226
});

src/_.general/binaryTree.js

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,32 +95,32 @@ export const binaryTreeToArray = (root) => {
9595

9696
const nodeQueue = [root];
9797
let bTreeArray = [root.val];
98-
let nullChainCount = 0;
98+
let nullTailsCount = 0;
9999

100100
while (nodeQueue.length > 0) {
101101
const curNode = nodeQueue.shift();
102102

103103
if (isTreeNode(curNode.left)) {
104104
bTreeArray.push(curNode.left.val);
105105
nodeQueue.push(curNode.left);
106-
nullChainCount = 0;
106+
nullTailsCount = 0;
107107
} else {
108108
bTreeArray.push(null);
109-
nullChainCount += 1;
109+
nullTailsCount += 1;
110110
}
111111

112112
if (isTreeNode(curNode.right)) {
113113
bTreeArray.push(curNode.right.val);
114114
nodeQueue.push(curNode.right);
115-
nullChainCount = 0;
115+
nullTailsCount = 0;
116116
} else {
117117
bTreeArray.push(null);
118-
nullChainCount += 1;
118+
nullTailsCount += 1;
119119
}
120120
}
121121

122-
if (nullChainCount > 0) {
123-
bTreeArray = bTreeArray.slice(0, -nullChainCount);
122+
if (nullTailsCount > 0) {
123+
bTreeArray = bTreeArray.slice(0, -nullTailsCount);
124124
// any ways to optimize this? O(n) time complexity here
125125
}
126126
return bTreeArray;
@@ -146,32 +146,32 @@ export const binaryTreeToString = (root) => {
146146

147147
const nodeQueue = [root];
148148
let bTreeStr = `${root.val}`;
149-
let nullChainCount = 0;
149+
let nullTailsCount = 0;
150150

151151
while (nodeQueue.length > 0) {
152152
const curNode = nodeQueue.shift();
153153

154154
if (isTreeNode(curNode.left)) {
155155
bTreeStr += `,${curNode.left.val}`;
156156
nodeQueue.push(curNode.left);
157-
nullChainCount = 0;
157+
nullTailsCount = 0;
158158
} else {
159159
bTreeStr += ",";
160-
nullChainCount += 1;
160+
nullTailsCount += 1;
161161
}
162162

163163
if (isTreeNode(curNode.right)) {
164164
bTreeStr += `,${curNode.right.val}`;
165165
nodeQueue.push(curNode.right);
166-
nullChainCount = 0;
166+
nullTailsCount = 0;
167167
} else {
168168
bTreeStr += ",";
169-
nullChainCount += 1;
169+
nullTailsCount += 1;
170170
}
171171
}
172172

173-
if (nullChainCount > 0) {
174-
bTreeStr = bTreeStr.slice(0, -nullChainCount);
173+
if (nullTailsCount > 0) {
174+
bTreeStr = bTreeStr.slice(0, -nullTailsCount);
175175
}
176176
return bTreeStr;
177177
};

0 commit comments

Comments
 (0)