| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | package mainimport "fmt"type node struct {	val   int	left  *node	right *node}func main() {	n8 := node{8, nil, nil}	n7 := node{7, nil, nil}	n6 := node{6, &n7, &n8}	n5 := node{5, nil, nil}	n4 := node{4, nil, &n6}	n3 := node{3, nil, &n5}	n2 := node{2, &n4, nil}	n1 := node{1, &n2, &n3}	fmt.Println("preorder: ")	preorder(&n1)	fmt.Println("\ninorder: ")	inorder(&n1)	fmt.Println("\npostorder: ")	postorder(&n1)	fmt.Println("\nlevelorder: ")	levelorder(&n1)	fmt.Println()}func preorder(root *node) {	if root == nil {		return	}	fmt.Printf("%d ", root.val)	preorder(root.left)	preorder(root.right)}func inorder(root *node) {	if root == nil {		return	}	inorder(root.left)	fmt.Printf("%d ", root.val)	inorder(root.right)}func postorder(root *node) {	if root == nil {		return	}	postorder(root.left)	postorder(root.right)	fmt.Printf("%d ", root.val)}func levelorder(root *node) {	if root == nil {		return	}	queue := make([]*node, 0)	queue = append(queue, root)	for len(queue) != 0 {		head := queue[len(queue)-1]		queue = queue[:len(queue)-1]		fmt.Printf("%d ", head.val)		if head.left != nil {			queue = append(queue, head.left)		}		if head.right != nil {			queue = append(queue, head.right)		}	}}
 |