traversal.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package main
  2. import "fmt"
  3. type node struct {
  4. val int
  5. left *node
  6. right *node
  7. }
  8. func main() {
  9. n8 := node{8, nil, nil}
  10. n7 := node{7, nil, nil}
  11. n6 := node{6, &n7, &n8}
  12. n5 := node{5, nil, nil}
  13. n4 := node{4, nil, &n6}
  14. n3 := node{3, nil, &n5}
  15. n2 := node{2, &n4, nil}
  16. n1 := node{1, &n2, &n3}
  17. fmt.Println("preorder: ")
  18. preorder(&n1)
  19. fmt.Println("\ninorder: ")
  20. inorder(&n1)
  21. fmt.Println("\npostorder: ")
  22. postorder(&n1)
  23. fmt.Println("\nlevelorder: ")
  24. levelorder(&n1)
  25. fmt.Println()
  26. }
  27. func preorder(root *node) {
  28. if root == nil {
  29. return
  30. }
  31. fmt.Printf("%d ", root.val)
  32. preorder(root.left)
  33. preorder(root.right)
  34. }
  35. func inorder(root *node) {
  36. if root == nil {
  37. return
  38. }
  39. inorder(root.left)
  40. fmt.Printf("%d ", root.val)
  41. inorder(root.right)
  42. }
  43. func postorder(root *node) {
  44. if root == nil {
  45. return
  46. }
  47. postorder(root.left)
  48. postorder(root.right)
  49. fmt.Printf("%d ", root.val)
  50. }
  51. func levelorder(root *node) {
  52. if root == nil {
  53. return
  54. }
  55. queue := make([]*node, 0)
  56. queue = append(queue, root)
  57. for len(queue) != 0 {
  58. head := queue[len(queue)-1]
  59. queue = queue[:len(queue)-1]
  60. fmt.Printf("%d ", head.val)
  61. if head.left != nil {
  62. queue = append(queue, head.left)
  63. }
  64. if head.right != nil {
  65. queue = append(queue, head.right)
  66. }
  67. }
  68. }