144.go 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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 preorderTraversalOld(root *TreeNode) []int {
  11. result := make([]int, 0)
  12. preorderRecurse(root, &result)
  13. return result
  14. }
  15. func preorderRecurse(node *TreeNode, result *[]int) {
  16. if node == nil {
  17. return
  18. }
  19. *result = append(*result, node.Val)
  20. preorderRecurse(node.Left, result)
  21. preorderRecurse(node.Right, result)
  22. }
  23. func preorderTraversal(root *TreeNode) []int {
  24. result := make([]int, 0)
  25. if root == nil {
  26. return result
  27. }
  28. stack := make([]*TreeNode, 0)
  29. curr := root
  30. for len(stack) != 0 || curr != nil {
  31. for curr != nil {
  32. result = append(result, curr.Val)
  33. stack = append(stack, curr)
  34. curr = curr.Left
  35. }
  36. if size := len(stack); size != 0 {
  37. curr = stack[size-1]
  38. stack = stack[:size-1]
  39. curr = curr.Right
  40. }
  41. }
  42. return result
  43. }
  44. // func main() {
  45. // t1 := sortedArrayToBST([]int{1, 2, 3, 4, 5, 6, 7})
  46. // printTree(t1)
  47. // fmt.Println(preorderTraversal(t1))
  48. // }