题目
给定一个二叉树,返回它的 后序 遍历。
示例:
输入: [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 {ret := []int{}if root != nil {ret = append(postorderTraversal(root.Left), postorderTraversal(root.Right)...)ret = append(ret, root.Val)}return ret}
方案二(迭代)
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/func postorderTraversal(root *TreeNode) []int {stack := []*TreeNode{root}visited := map[*TreeNode]bool{}ret := []int{}for len(stack) > 0 {node := stack[len(stack) - 1]stack = stack[:len(stack) - 1]if _, ok := visited[node]; ok {ret = append(ret, node.Val)continue}if node != nil {visited[node] = truestack = append(stack, node)stack = append(stack, node.Right)stack = append(stack, node.Left)}}return ret}
不需要 **visited** 的迭代:
# Definition for a binary tree node.# class TreeNode:# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution:def postorderTraversal(self, root: TreeNode) -> List[int]:if not root:return []stack, res = [root], []while stack:node = stack.pop()res.append(node.val)if node.left:stack.append(node.left)if node.right:stack.append(node.right)return res[::-1]
原文
https://leetcode-cn.com/explore/learn/card/data-structure-binary-tree/2/traverse-a-tree/3/
https://leetcode-cn.com/problems/binary-tree-postorder-traversal/solution/er-cha-shu-de-hou-xu-bian-li-by-leetcode/
