方法一

思路:层次遍历,采用双层循环进行层次遍历,里面那层循环可以计算出每一层的和然后出来那层循环以后求平均值加入结果切片中

  1. /**
  2. * Definition for a binary tree node.
  3. * type TreeNode struct {
  4. * Val int
  5. * Left *TreeNode
  6. * Right *TreeNode
  7. * }
  8. */
  9. func averageOfLevels(root *TreeNode) []float64 {
  10. if root == nil {
  11. return []float64{}
  12. }
  13. //层次遍历的时候每次遍历当前层的时候使用sum统计
  14. queue := []*TreeNode{root}
  15. //每一层的大小
  16. var length int
  17. //每一层的和
  18. var sum float64
  19. //结果数组
  20. ret := []float64{}
  21. for len(queue) != 0 {
  22. length = len(queue)
  23. sum = 0
  24. for i := 0; i < length; i++ {
  25. node := queue[0]
  26. queue = queue[1:]
  27. //加入左节点
  28. if node.Left != nil {
  29. queue = append(queue, node.Left)
  30. }
  31. //加入右节点
  32. if node.Right != nil {
  33. queue = append(queue, node.Right)
  34. }
  35. sum += float64(node.Val)
  36. }
  37. ret = append(ret, sum/float64(length))
  38. }
  39. return ret
  40. }