package main import "fmt" type TreeItem struct { Name string Age int left *TreeItem right *TreeItem } func (item *TreeItem) countChildren() int { count := 0 if item.left != nil { count += item.left.countChildren() + 1 } if item.right != nil { count += item.right.countChildren() + 1 } return count } type Tree struct { root *TreeItem } func (tree *Tree) count() int { if tree.root == nil { return 0 } return tree.root.countChildren() + 1 } func (tree *Tree) findByAge(age int) *TreeItem { if tree.root == nil { return nil } item := tree.root for item != nil && item.Age != age { if item.Age < age { item = item.right } else if item.Age > age { item = item.left } } if item != nil && item.Age == age { return item } return nil } func main() { root := &TreeItem{Name: "Max", Age: 5} root.left = &TreeItem{Name: "Hans", Age: 3} root.right = &TreeItem{Name: "Hermann", Age: 8} tree := Tree{root} fmt.Println("Count: ", tree.count()) f := tree.findByAge(9) fmt.Println(f) }