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)
- }
- }
- }
|