| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | 
							- package main
 
- import "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)
 
- 		}
 
- 	}
 
- }
 
 
  |