107.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package main
  2. // TreeNode ...
  3. // type TreeNode struct {
  4. // Val int
  5. // Left *TreeNode
  6. // Right *TreeNode
  7. // }
  8. func reverseArr(arr *[][]int) {
  9. for i, j := 0, len(*arr)-1; i < j; i, j = i+1, j-1 {
  10. (*arr)[i], (*arr)[j] = (*arr)[j], (*arr)[i]
  11. }
  12. }
  13. func levelOrderBottomIter(curr *TreeNode, depth int, arr *[][]int) {
  14. if curr == nil {
  15. return
  16. }
  17. if curr.Left != nil {
  18. levelOrderBottomIter(curr.Left, depth+1, arr)
  19. }
  20. if curr.Right != nil {
  21. levelOrderBottomIter(curr.Right, depth+1, arr)
  22. }
  23. for len(*arr) < depth+1 {
  24. layer := make([]int, 0)
  25. *arr = append(*arr, layer)
  26. }
  27. (*arr)[depth] = append((*arr)[depth], curr.Val)
  28. }
  29. /**
  30. * Definition for a binary tree node.
  31. * type TreeNode struct {
  32. * Val int
  33. * Left *TreeNode
  34. * Right *TreeNode
  35. * }
  36. */
  37. func levelOrderBottom(root *TreeNode) [][]int {
  38. arr := make([][]int, 0)
  39. levelOrderBottomIter(root, 0, &arr)
  40. reverseArr(&arr)
  41. return arr
  42. }
  43. // func main() {
  44. // /**
  45. // * t1: 5
  46. // * / \
  47. // * 1 4
  48. // * / \
  49. // * 2 3
  50. // */
  51. // t1l := TreeNode{1, nil, nil}
  52. // t1rl := TreeNode{2, nil, nil}
  53. // t1rr := TreeNode{3, nil, nil}
  54. // t1r := TreeNode{4, &t1rl, &t1rr}
  55. // t1 := &TreeNode{5, &t1l, &t1r}
  56. // t2 := &TreeNode{9, nil, nil}
  57. // fmt.Println(levelOrderBottom(t1))
  58. // fmt.Println(levelOrderBottom(t2))
  59. // }