# binary-trees Go #7 program

## source code

```/* The Computer Language Benchmarks Game
* https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
*
* contributed by Anthony Perez-Sanz.
* based on Java program by Jarkko Miettinen
* *reset*
*/

package main

import (
"flag"
"fmt"
"strconv"
)

type Node struct {
left, right *Node
}

const minDepth = 4

func trees(maxDepth int) {
longLastingNode := createTree(maxDepth)
depth := 4

for depth <= maxDepth {
iterations := 1 << uint(maxDepth-depth+minDepth) // 16 << (maxDepth - depth)

loops(iterations, depth)
depth += 2
}
fmt.Printf("long lived tree of depth %d\t check: %d\n", maxDepth,
checkTree(longLastingNode))
}

func loops(iterations, depth int) {
check := 0
item := 0
for item < iterations {
check += checkTree(createTree(depth))
item++
}
fmt.Printf("%d\t trees of depth %d\t check: %d\n",
iterations, depth, check)
}

func checkTree(n *Node) int {
if n.left == nil {
return 1
}
return checkTree(n.left) + checkTree(n.right) + 1
}

func createTree(depth int) *Node {
node := &Node{}
if depth > 0 {
depth--
node.left = createTree(depth)
node.right = createTree(depth)
}
return node
}

func main() {
n := 0
flag.Parse()
if flag.NArg() > 0 {
n, _ = strconv.Atoi(flag.Arg(0))
}

maxDepth := n
if minDepth+2 > n {
maxDepth = minDepth + 2
}

{
stretchDepth := maxDepth + 1
check := checkTree(createTree(stretchDepth))
fmt.Printf("stretch tree of depth %d\t check: %d\n", stretchDepth, check)
}
trees(maxDepth)
}
```

## notes, command-line, and program output

```NOTES:
go version go1.22.3 linux/amd64
GOAMD64=v2

Thu, 23 May 2024 01:24:33 GMT

MAKE:
/opt/src/go1.22.3/go/bin/go build -o binarytrees.go-7.go_run binarytrees.go-7.go

4.14s to complete and log all make actions

COMMAND LINE:
./binarytrees.go-7.go_run 21

PROGRAM OUTPUT:
stretch tree of depth 22	 check: 8388607
2097152	 trees of depth 4	 check: 65011712
524288	 trees of depth 6	 check: 66584576
131072	 trees of depth 8	 check: 66977792
32768	 trees of depth 10	 check: 67076096
8192	 trees of depth 12	 check: 67100672
2048	 trees of depth 14	 check: 67106816
512	 trees of depth 16	 check: 67108352
128	 trees of depth 18	 check: 67108736
32	 trees of depth 20	 check: 67108832
long lived tree of depth 21	 check: 4194303
```