Skip to content

Commit fd85ddd

Browse files
authored
go binarytrees (#75)
1 parent 4e9920f commit fd85ddd

File tree

2 files changed

+18
-25
lines changed

2 files changed

+18
-25
lines changed

bench/algorithm/binarytrees/1.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ import (
1818
var n = 0
1919

2020
type Node struct {
21-
left, right *Node
21+
left *Node
22+
right *Node
2223
}
2324

2425
func bottomUpTree(depth int) *Node {

bench/algorithm/binarytrees/2.go

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,3 @@
1-
/* The Computer Language Benchmarks Game
2-
* https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
3-
*
4-
* Contributed by Alexandr Karbivnichiy
5-
*/
6-
71
package main
82

93
import (
@@ -15,32 +9,30 @@ import (
159
)
1610

1711
type Node struct {
18-
next *Next
19-
}
20-
21-
type Next struct {
22-
left, right Node
12+
left *Node
13+
right *Node
2314
}
2415

25-
func createTree(depth int) Node {
16+
func createTree(depth int) *Node {
2617
if depth > 1 {
27-
return Node{&Next{createTree(depth - 1), createTree(depth - 1)}}
18+
return &Node{createTree(depth - 1), createTree(depth - 1)}
2819
}
29-
return Node{&Next{Node{}, Node{}}}
20+
return &Node{&Node{}, &Node{}}
3021
}
3122

32-
func checkTree(node Node) int {
23+
func (node *Node) checkTree() int {
3324
sum := 1
34-
current := node.next
35-
for current != nil {
36-
sum += checkTree(current.right) + 1
37-
current = current.left.next
25+
if node.left != nil {
26+
sum += node.left.checkTree()
27+
}
28+
if node.right != nil {
29+
sum += node.right.checkTree()
3830
}
3931
return sum
4032
}
4133

4234
func main() {
43-
n := 0
35+
n := 10
4436
flag.Parse()
4537
if flag.NArg() > 0 {
4638
n, _ = strconv.Atoi(flag.Arg(0))
@@ -50,7 +42,7 @@ func main() {
5042

5143
func run(maxDepth int) {
5244
const minDepth = 4
53-
var longLivedTree Node
45+
var longLivedTree *Node
5446
var group sync.WaitGroup
5547
var messages sync.Map
5648

@@ -61,7 +53,7 @@ func run(maxDepth int) {
6153
group.Add(1)
6254
go func() {
6355
messages.Store(-1, fmt.Sprintf("stretch tree of depth %d\t check: %d",
64-
maxDepth+1, checkTree(createTree(maxDepth+1))))
56+
maxDepth+1, createTree(maxDepth+1).checkTree()))
6557
longLivedTree = createTree(maxDepth)
6658
group.Done()
6759
}()
@@ -71,7 +63,7 @@ func run(maxDepth int) {
7163
group.Add(1)
7264
go func(depth, iters, chk int) {
7365
for i := 0; i < iters; i++ {
74-
chk += checkTree(createTree(depth))
66+
chk += createTree(depth).checkTree()
7567
}
7668
messages.Store(depth, fmt.Sprintf("%d\t trees of depth %d\t check: %d",
7769
iters, depth, chk))
@@ -93,5 +85,5 @@ func run(maxDepth int) {
9385
}
9486

9587
fmt.Printf("long lived tree of depth %d\t check: %d\n",
96-
maxDepth, checkTree(longLivedTree))
88+
maxDepth, longLivedTree.checkTree())
9789
}

0 commit comments

Comments
 (0)