199.go 1.1 KB

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