1- /* The Computer Language Benchmarks Game
2- * https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
3- *
4- * Contributed by Alexandr Karbivnichiy
5- */
6-
71package main
82
93import (
@@ -15,32 +9,30 @@ import (
159)
1610
1711type 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
4234func 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
5143func 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