102.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package main
  2. // MyNode ...
  3. type MyNode struct {
  4. Node *TreeNode
  5. Level int
  6. }
  7. /**
  8. * Definition for a binary tree node.
  9. * type TreeNode struct {
  10. * Val int
  11. * Left *TreeNode
  12. * Right *TreeNode
  13. * }
  14. */
  15. func levelOrder(root *TreeNode) [][]int {
  16. result := [][]int{}
  17. stack := []MyNode{}
  18. curr := root
  19. top := -1
  20. level := 0
  21. for curr != nil || top > -1 { // Inorder traversal
  22. for curr != nil {
  23. stack = append(stack, MyNode{curr, level})
  24. top++
  25. curr = curr.Left
  26. level++
  27. }
  28. if top > -1 {
  29. curr = stack[top].Node
  30. level = stack[top].Level
  31. stack = stack[:top]
  32. top--
  33. for len(result) <= level {
  34. result = append(result, []int{})
  35. }
  36. result[level] = append(result[level], curr.Val)
  37. curr = curr.Right
  38. level++
  39. }
  40. }
  41. return result
  42. }
  43. // func main() {
  44. // // 1
  45. // // /
  46. // // 2
  47. // // / \
  48. // // 3 4
  49. // n4 := TreeNode{4, nil, nil}
  50. // n3 := TreeNode{3, nil, nil}
  51. // n2 := TreeNode{2, &n3, &n4}
  52. // n1 := TreeNode{1, &n2, nil}
  53. // fmt.Println(levelOrder(&n1))
  54. // }