-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbinary_trees.swan
47 lines (37 loc) · 1 KB
/
binary_trees.swan
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
// Ported from the Python version.
class Tree {
constructor (_item, depth) {
if (depth > 0) {
var item2 = _item + _item
depth -= 1
_left = Tree(item2 - 1, depth)
_right = Tree(item2, depth)
}
}
check {
if (_left is undefined) {
return _item
}
return _item + _left.check - _right.check
}
}
var minDepth = 4
var maxDepth = 12
var stretchDepth = maxDepth + 1
var start = clock()
print("stretch tree of depth " + stretchDepth + " check: " +
"" + Tree(0, stretchDepth).check)
var longLivedTree = Tree(0, maxDepth)
var iterations = 2 ** maxDepth
var depth = minDepth
while (depth < stretchDepth) {
var check = 0
for i in 1...iterations {
check = check + Tree(i, depth).check + Tree(-i, depth).check
}
print("" + (iterations * 2) + " trees of depth " + depth + " check: " + check)
iterations /= 4
depth += 2
}
print( "long lived tree of depth " + maxDepth + " check: " + longLivedTree.check)
print(format("elapsed: %1", (clock() - start)))