面试题32 - II. 从上到下打印二叉树 II

image.png

1每次把所以的数组节点都出栈
2然后把所以的子节点元素都入栈
3直到所有栈为空

  1. package main
  2. import "fmt"
  3. type TreeNode struct {
  4. Val int
  5. Left *TreeNode
  6. Right *TreeNode
  7. }
  8. func levelOrder(root *TreeNode) [][]int {
  9. if root == nil {
  10. return nil
  11. }
  12. nodes := make([]*TreeNode, 0)
  13. nodes = append(nodes, root)
  14. var res [][]int
  15. for len(nodes) > 0 {
  16. var nodeList []*TreeNode
  17. var values []int
  18. for i := 0; i < len(nodes); i++ {
  19. node := nodes[i]
  20. if node.Left != nil {
  21. nodeList = append(nodeList, node.Left)
  22. }
  23. if node.Right != nil {
  24. nodeList = append(nodeList, node.Right)
  25. }
  26. values = append(values, node.Val)
  27. }
  28. if len(values) > 0 {
  29. res = append(res, values, )
  30. }
  31. nodes = append(nodes[len(nodes):], nodeList...)
  32. }
  33. return res
  34. }
  35. func main() {
  36. three := &TreeNode{Val: 3}
  37. nine := &TreeNode{Val: 9}
  38. three.Left = nine
  39. twenty := &TreeNode{Val: 20}
  40. three.Right = twenty
  41. fifteen := &TreeNode{Val: 15}
  42. twenty.Left = fifteen
  43. severn := &TreeNode{Val: 7}
  44. twenty.Right = severn
  45. fmt.Println(levelOrder(three))
  46. }

image.png