图片.png

    1. package main
    2. import "fmt"
    3. // 前序遍历
    4. type TreeNode struct {
    5. Val int
    6. Left *TreeNode
    7. Right *TreeNode
    8. }
    9. // 递归方法
    10. func preorderTraversal1(root *TreeNode) []int{
    11. if root==nil {
    12. return nil
    13. }
    14. fmt.Println(root.Val)
    15. preorderTraversal1(root.Left)
    16. preorderTraversal1(root.Right)
    17. return nil
    18. }
    19. //中序遍历
    20. func preorderTraversal2(root *TreeNode) []int {
    21. var l []int
    22. //如果是空直接返回
    23. if root == nil {
    24. return nil
    25. }
    26. // 创建栈 递归从根源就是栈结构
    27. stack := make([]*TreeNode, 0)
    28. curr := root
    29. // 只要当前节点不为空,或者栈不为空,就一直循环查找左节点
    30. for curr != nil || len(stack) > 0 {
    31. //查找左节点
    32. for (curr != nil){
    33. stack = append(stack,curr)
    34. fmt.Println(curr.Val)
    35. l = append(l,curr.Val)
    36. curr = curr.Left
    37. }
    38. curr = stack[len(stack)-1]
    39. stack = stack[:len(stack)-1]
    40. curr = curr.Right
    41. }
    42. return l
    43. }
    44. //前序遍历 中左右
    45. func preorderTraversal(root *TreeNode) []int {
    46. var l []int
    47. //如果是空直接返回
    48. if root == nil {
    49. return nil
    50. }
    51. // 创建栈 递归从根源就是栈结构
    52. stack := make([]*TreeNode, 0)
    53. stack = append(stack,root)
    54. // 只要栈不为空
    55. for len(stack) > 0 {
    56. //直接出栈
    57. curr := stack[len(stack)-1]
    58. stack = stack[:len(stack)-1]
    59. l = append(l,curr.Val)
    60. //先压入右节点
    61. if curr.Right != nil {
    62. stack = append(stack,curr.Right)
    63. }
    64. //先压入左节点
    65. if curr.Left != nil {
    66. stack = append(stack,curr.Left)
    67. }
    68. }
    69. return l
    70. }
    71. //https://leetcode-cn.com/problems/binary-tree-preorder-traversal/
    72. func main() {
    73. a := &TreeNode{
    74. Val: 1,
    75. }
    76. b := &TreeNode{
    77. Val: 2,
    78. }
    79. a.Left = b
    80. c := &TreeNode{
    81. Val: 3,
    82. }
    83. a.Right = c
    84. d := &TreeNode{
    85. Val: 4,
    86. }
    87. b.Left = d
    88. e := &TreeNode{
    89. Val: 5,
    90. }
    91. b.Right = e
    92. f := &TreeNode{
    93. Val: 6,
    94. }
    95. c.Left = f
    96. // 1 2 4 5 3 6
    97. preorderTraversal(a)
    98. }