Skip to content

Commit 37381f9

Browse files
committed
sort out issues related to trees that came about from merging the changes needed to codesandbox the course
1 parent 533a687 commit 37381f9

File tree

6 files changed

+74
-293
lines changed

6 files changed

+74
-293
lines changed

binaryTrees/index.js

Lines changed: 28 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
function createNode(key) {
2-
const children = []
1+
// Binary Trees and Tree Traversal
32

4-
return {
5-
key,
6-
children,
7-
addChild(childKey) {
8-
const childNode = createNode(childKey)
9-
children.push(childNode)
10-
return childNode
11-
}
12-
}
13-
}
3+
// Binary trees are trees whose nodes can only have up to two children
144

155
function createBinaryNode(key) {
166
return {
@@ -30,71 +20,43 @@ function createBinaryNode(key) {
3020
}
3121
}
3222

33-
function createTree(rootKey) {
34-
const root = createNode(rootKey)
35-
36-
return {
37-
root,
38-
print() {
39-
let result = root.key
40-
41-
function traverse(node, visitFn) {
42-
if (node.children.length) {
43-
node.children.forEach(visitFn)
44-
node.children.forEach(n => traverse(n, visitFn))
45-
}
46-
}
47-
48-
function addKeyToResult(node) {
49-
result += ` => ${node.key}`
50-
}
51-
52-
traverse(root, addKeyToResult)
53-
54-
return result
23+
const TRAVERSALS = {
24+
IN_ORDER: (node, visitFn) => {
25+
if (node !== null) {
26+
TRAVERSALS.IN_ORDER(node.left, visitFn)
27+
visitFn(node)
28+
TRAVERSALS.IN_ORDER(node.right, visitFn)
29+
}
30+
},
31+
PRE_ORDER: (node, visitFn) => {
32+
if (node !== null) {
33+
visitFn(node)
34+
TRAVERSALS.PRE_ORDER(node.left, visitFn)
35+
TRAVERSALS.PRE_ORDER(node.right, visitFn)
36+
}
37+
},
38+
POST_ORDER: (node, visitFn) => {
39+
if (node !== null) {
40+
TRAVERSALS.POST_ORDER(node.left, visitFn)
41+
TRAVERSALS.POST_ORDER(node.right, visitFn)
42+
visitFn(node)
5543
}
5644
}
5745
}
5846

5947
function createBinaryTree(rootKey) {
6048
const root = createBinaryNode(rootKey)
6149

62-
const TRAVERSALS = {
63-
IN_ORDER: (node, visitFn) => {
64-
if (node !== null) {
65-
TRAVERSALS.IN_ORDER(node.left, visitFn)
66-
visitFn(node)
67-
TRAVERSALS.IN_ORDER(node.right, visitFn)
68-
}
69-
},
70-
71-
PRE_ORDER: (node, visitFn) => {
72-
if (node !== null) {
73-
visitFn(node)
74-
TRAVERSALS.PRE_ORDER(node.left, visitFn)
75-
TRAVERSALS.PRE_ORDER(node.right, visitFn)
76-
}
77-
},
78-
79-
POST_ORDER: (node, visitFn) => {
80-
if (node !== null) {
81-
TRAVERSALS.POST_ORDER(node.left, visitFn)
82-
TRAVERSALS.POST_ORDER(node.right, visitFn)
83-
visitFn(node)
84-
}
85-
}
86-
}
87-
8850
return {
8951
root,
90-
print(orderType = 'IN_ORDER') {
52+
print(traversalType = 'IN_ORDER') {
9153
let result = ''
9254

93-
const visitFn = node => {
55+
const visit = node => {
9456
result += result.length === 0 ? node.key : ` => ${node.key}`
9557
}
9658

97-
TRAVERSALS[orderType](this.root, visitFn)
59+
TRAVERSALS[traversalType](this.root, visit)
9860

9961
return result
10062
}
@@ -111,13 +73,11 @@ const g = c.addRight('g')
11173
const h = d.addLeft('h')
11274
const i = d.addRight('i')
11375

114-
console.log("IN_ORDER: ", tree.print())
76+
console.log('IN_ORDER: ', tree.print())
11577

116-
console.log("PRE_ORDER: ", tree.print('PRE_ORDER'))
78+
console.log('PRE_ORDER: ', tree.print('PRE_ORDER'))
11779

118-
console.log("POST_ORDER: ", tree.print('POST_ORDER'))
80+
console.log('POST_ORDER: ', tree.print('POST_ORDER'))
11981

12082
exports.createBinaryNode = createBinaryNode
12183
exports.createBinaryTree = createBinaryTree
122-
exports.createNode = createNode
123-
exports.createTree = createTree

binaryTrees/index.test.js

Lines changed: 1 addition & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,4 @@
1-
const {
2-
createBinaryNode,
3-
createBinaryTree,
4-
createTree,
5-
createNode
6-
} = require('./index')
7-
8-
describe('Node', () => {
9-
let node
10-
beforeEach(() => {
11-
node = createNode('a')
12-
})
13-
14-
test('existence', () => {
15-
expect(node).toBeDefined()
16-
})
17-
18-
test('key', () => {
19-
expect(node.key).toEqual('a')
20-
})
21-
22-
test('children', () => {
23-
expect(node.children).toBeDefined()
24-
expect(node.children.length).toEqual(0)
25-
})
26-
27-
test('addChild', () => {
28-
node.addChild('b')
29-
30-
expect(node.children.length).toEqual(1)
31-
expect(node.children.map(n => n.key).includes('b')).toBe(true)
32-
})
33-
})
1+
const { createBinaryNode, createBinaryTree } = require('./index')
342

353
describe('BinaryNode', () => {
364
let node
@@ -69,34 +37,6 @@ describe('BinaryNode', () => {
6937
})
7038
})
7139

72-
describe('Tree', () => {
73-
let tree
74-
beforeEach(() => {
75-
tree = createTree('a')
76-
})
77-
78-
test('existence', () => {
79-
expect(tree).toBeDefined()
80-
})
81-
82-
test('root', () => {
83-
expect(tree.root).toBeDefined()
84-
expect(tree.root.key).toEqual('a')
85-
})
86-
87-
test('print', () => {
88-
const b = tree.root.addChild('b')
89-
const c = tree.root.addChild('c')
90-
const d = b.addChild('d')
91-
const e = b.addChild('e')
92-
const f = c.addChild('f')
93-
const g = c.addChild('g')
94-
const h = f.addChild('h')
95-
96-
expect(tree.print()).toEqual(`a => b => c => d => e => f => g => h`)
97-
})
98-
})
99-
10040
describe('BinaryTree', () => {
10141
let binaryTree
10242
beforeEach(() => {

graphs/breadthFirstSearch.js

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ function createGraph(directed = false) {
4848
let result = `${key}`
4949

5050
if (children.length) {
51-
result += ` => ${children
52-
.map(node => node.key)
53-
.join(' ')}`
51+
result += ` => ${children.map(node => node.key).join(' ')}`
5452
}
5553

5654
return result
@@ -59,16 +57,11 @@ function createGraph(directed = false) {
5957
},
6058

6159
bfs(startingNodeKey, visitFn) {
62-
const startingNode = this.getNode(
63-
startingNodeKey
64-
)
65-
const visitedHash = nodes.reduce(
66-
(acc, cur) => {
67-
acc[cur.key] = false
68-
return acc
69-
},
70-
{}
71-
)
60+
const startingNode = this.getNode(startingNodeKey)
61+
const visitedHash = nodes.reduce((acc, cur) => {
62+
acc[cur.key] = false
63+
return acc
64+
}, {})
7265
const queue = createQueue()
7366
queue.enqueue(startingNode)
7467

@@ -89,16 +82,11 @@ function createGraph(directed = false) {
8982
},
9083

9184
dfs(startingNodeKey, visitFn) {
92-
const startingNode = this.getNode(
93-
startingNodeKey
94-
)
95-
const visitedHash = nodes.reduce(
96-
(acc, cur) => {
97-
acc[cur.key] = false
98-
return acc
99-
},
100-
{}
101-
)
85+
const startingNode = this.getNode(startingNodeKey)
86+
const visitedHash = nodes.reduce((acc, cur) => {
87+
acc[cur.key] = false
88+
return acc
89+
}, {})
10290

10391
function explore(node) {
10492
if (visitedHash[node.key]) {
@@ -128,21 +116,20 @@ const edges = [
128116
['b', 'e'],
129117
['c', 'b'],
130118
['d', 'c'],
131-
['d', 'e'],
119+
['d', 'e']
132120
]
133121

134122
nodes.forEach(node => {
135123
graph.addNode(node)
136124
})
137125

138-
edges.forEach((nodes) => {
126+
edges.forEach(nodes => {
139127
graph.addEdge(...nodes)
140128
})
141129

142130
graph.bfs('a', node => {
143131
console.log(node.key)
144132
})
145133

146-
147134
exports.createNode = createNode
148135
exports.createGraph = createGraph

graphs/depthFirstSearch.js

Lines changed: 14 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -48,9 +48,7 @@ function createGraph(directed = false) {
4848
let result = `${key}`
4949

5050
if (children.length) {
51-
result += ` => ${children
52-
.map(node => node.key)
53-
.join(' ')}`
51+
result += ` => ${children.map(node => node.key).join(' ')}`
5452
}
5553

5654
return result
@@ -59,16 +57,11 @@ function createGraph(directed = false) {
5957
},
6058

6159
bfs(startingNodeKey, visitFn) {
62-
const startingNode = this.getNode(
63-
startingNodeKey
64-
)
65-
const visitedHash = nodes.reduce(
66-
(acc, cur) => {
67-
acc[cur.key] = false
68-
return acc
69-
},
70-
{}
71-
)
60+
const startingNode = this.getNode(startingNodeKey)
61+
const visitedHash = nodes.reduce((acc, cur) => {
62+
acc[cur.key] = false
63+
return acc
64+
}, {})
7265
const queue = createQueue()
7366
queue.enqueue(startingNode)
7467

@@ -89,16 +82,11 @@ function createGraph(directed = false) {
8982
},
9083

9184
dfs(startingNodeKey, visitFn) {
92-
const startingNode = this.getNode(
93-
startingNodeKey
94-
)
95-
const visitedHash = nodes.reduce(
96-
(acc, cur) => {
97-
acc[cur.key] = false
98-
return acc
99-
},
100-
{}
101-
)
85+
const startingNode = this.getNode(startingNodeKey)
86+
const visitedHash = nodes.reduce((acc, cur) => {
87+
acc[cur.key] = false
88+
return acc
89+
}, {})
10290

10391
function explore(node) {
10492
if (visitedHash[node.key]) {
@@ -128,16 +116,15 @@ const edges = [
128116
['b', 'e'],
129117
['c', 'b'],
130118
['d', 'c'],
131-
['d', 'e'],
119+
['d', 'e']
132120
]
133121

134122
nodes.forEach(node => {
135123
graph.addNode(node)
136124
})
137125

138-
edges.forEach((...nodes) => {
139-
// graph.addEdge(...nodes)
140-
graph.addEdge(nodes[0][0], nodes[0][1])
126+
edges.forEach(nodes => {
127+
graph.addEdge(...nodes)
141128
})
142129

143130
graph.dfs('a', node => {

trees/tree.js renamed to trees/index.js

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,28 +24,24 @@ function createTree(rootKey) {
2424
visitFn(node, depth)
2525

2626
if (node.children.length) {
27-
node.children.forEach(n => traverse(n, visitFn, depth + 1))
27+
node.children.forEach(n => traverse(n, visitFn, depth + 1))
2828
}
2929
}
3030

3131
function addKeyToResult(node, depth) {
32-
result +=
32+
result +=
3333
result.length === 0
3434
? node.key
35-
: `\n${' '.repeat(depth * 2)}${
36-
node.key
37-
}`
35+
: `\n${' '.repeat(depth * 2)}${node.key}`
3836
}
3937

40-
traverse(root, addKeyToResult, 1)
38+
traverse(root, addKeyToResult, 0)
4139

4240
return result
4341
}
4442
}
4543
}
4644

47-
48-
4945
const dom = createTree('html')
5046
const head = dom.root.addChild('head')
5147
const body = dom.root.addChild('body')
@@ -60,4 +56,4 @@ const copyright = footer.addChild(`Copyright ${new Date().getFullYear()}`)
6056
console.log(dom.print())
6157

6258
exports.createNode = createNode
63-
exports.createTree = createTree
59+
exports.createTree = createTree

0 commit comments

Comments
 (0)