1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77  // @Title: 二叉树的后序遍历 (Binary Tree Postorder Traversal) // @Author: 15816537946@163.com // @Date: 2019-11-25 18:26:28 // @Runtime: 0 ms // @Memory: 2.1 MB /* * @lc app=leetcode.cn id=145 lang=golang * * [145] 二叉树的后序遍历 * * https://leetcode-cn.com/problems/binary-tree-postorder-traversal/description/ * * algorithms * Hard (67.10%) * Likes: 146 * Dislikes: 0 * Total Accepted: 25.5K * Total Submissions: 38K * Testcase Example: '[1,null,2,3]' * * 给定一个二叉树，返回它的 后序 遍历。 * * 示例: * * 输入: [1,null,2,3] * ⁠ 1 * ⁠ \ * ⁠ 2 * ⁠ / * ⁠ 3 * * 输出: [3,2,1] * * 进阶: 递归算法很简单，你可以通过迭代算法完成吗？ * */ /** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */ func postorderTraversal(root *TreeNode) []int { if root == nil { return nil } res := make([]int, 0) nodes := make([]*TreeNode, 1, 1024) nodes[0] = root for len(nodes) > 0 { node := nodes[len(nodes)-1] nodes = nodes[:len(nodes)-1] res = append(res, node.Val) if node.Left != nil { nodes = append(nodes, node.Left) } if node.Right != nil { nodes = append(nodes, node.Right) } } reverse(res) return res } func reverse(arr []int) { lo, hi :=0, len(arr)-1 for lo < hi { arr[lo],arr[hi] = arr[hi], arr[lo] lo++ hi-- } }