层序遍历二叉树

队列一大用处就是实现二叉树的层序遍历,将存在的左右子节点均加入队列,然后继续队头遍历。
image.png
golang实现

  1. type Node struct {
  2. Left *Node
  3. Right *Node
  4. Data interface{}
  5. }
  6. func main() {
  7. // 构造二叉树
  8. n1 := Node{Data: "1"}
  9. n2 := Node{Data: "2"}
  10. n3 := Node{Data: "3"}
  11. n4 := Node{Data: "4"}
  12. n5 := Node{Data: "5"}
  13. n7 := Node{Data: "7"}
  14. n1.Left = &n2
  15. n1.Right = &n3
  16. n2.Left = &n4
  17. n2.Right = &n5
  18. n3.Right = &n7
  19. // 遍历二叉树, 定义切片表示队列,加入根节点
  20. queue := []*Node{&n1}
  21. // 最终结果
  22. var result []*Node
  23. // 循环处理
  24. for true {
  25. // 将左子节点加入队列
  26. if queue[0].Left != nil {
  27. queue = append(queue, queue[0].Left)
  28. }
  29. // 将右子节点加入队列
  30. if queue[0].Right != nil {
  31. queue = append(queue, queue[0].Right)
  32. }
  33. // 当前节点加入结果
  34. result = append(result, queue[0])
  35. // 队列中是否还有剩余节点
  36. if len(queue) > 1 {
  37. // 截取剩余节点
  38. queue = queue[1:]
  39. } else {
  40. // 队列中没有剩余节点了
  41. break
  42. }
  43. }
  44. // 遍历结果
  45. for _, ele := range result {
  46. fmt.Print(ele.Data, " ")
  47. }
  48. }

结果和图示一致

1 2 3 4 5 7