145. Binary Tree Postorder Traversal

Source code notebook Author Update time

Given the root of a binary tree, return the postorder traversal of its nodes ' values.

Example 1:

Input: root = [1,null,2,3]
Output: [3,2,1]

Example 2:

Input: root = []
Output: []

Example 3:

Input: root = [1]
Output: [1]

Example 4:

Input: root = [1,2]
Output: [2,1]

Example 5:

Input: root = [1,null,2]
Output: [2,1]

Constraints:

  • The number of the nodes in the tree is in the range [0, 100].
  • -100 <= Node.val <= 100

Follow up:

Recursive solution is trivial, could you do it iteratively?

# @lc code=start
using LeetCode
postorder_traversal(::Nothing) = Int[]
function postorder_traversal(root::TreeNode)::Vector{Int}
    res, stack = Int[], [(root, -1)] ## -1 for left subtree, 1 for right subtree
    while !isempty(stack)
        cur = last(stack)
        if last(cur) == -1 ## search left subtree
            stack[end] = (cur[1], 1)
            !isnothing(cur[1].left) && push!(stack, (cur[1].left, -1))
        elseif last(cur) == 1 ## search right subtree
            stack[end] = (cur[1], 0)
            !isnothing(cur[1].right) && push!(stack, (cur[1].right, -1))
        else
            cur = pop!(stack)
            push!(res, cur[1].val) ## postorder traversal: put codes here
        end
    end
    return res
end

##### code template for inorder/preorder/postorder traversal #####
# function traversal(root::TreeNode)::Vector{Int}
#     res, stack = Int[], [(root, -1)] ## -1 for left subtree, 1 for right subtree
#     while !isempty(stack)
#         cur = last(stack)
#         if last(cur) == -1 ## search left subtree
#             stack[end] = (cur[1], 1)
#             ## preorder traversal: put codes here
#             !isnothing(cur[1].left) && push!(stack, (cur[1].left, -1))
#         elseif last(cur) == 1 ## search right subtree
#             stack[end] = (cur[1], 0)
#             ## inorder traversal: put codes here
#             !isnothing(cur[1].right) && push!(stack, (cur[1].right, -1))
#         else
#             cur = pop!(stack)
#             ## postorder traversal: put codes here
#         end
#     end
#     return res
# end

# @lc code=end
postorder_traversal (generic function with 2 methods)

This page was generated using DemoCards.jl and Literate.jl.