Monday, June 2, 2014

LeetCode: Binary Tree Postorder Traversal

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

For example:
Given binary tree {1,#,2,3},

   1
    \
     2
    /
   3

return [3,2,1].


Also, we can use the same idea as preorder traversal: using a stack to simulate recursion. But for postorder, we need to insert a new value to the head of the list each time.

C++ Code:

/*
 * func: postorder_traversal
 * goal: postorder traverse the tree
 * @param root: root node of the tree
 * return: traversal list
 */
vector<int> postorder_traversal(TreeNode *root){
    vector<int> result;
    if(root == nullptr){
        return result;
    }
    stack<TreeNode *> postorder_helper;
    postorder_helper.emplace(root);
    while(!postorder_helper.empty()){
        TreeNode *curr = postorder_helper.top();
        result.emplace(result.begin(), curr->val);
        postorder_helper.pop();
        if(curr->left){
            postorder_helper.emplace(curr->left);
        }
        if(curr->right){
            postorder_helper.emplace(curr->right);
        }
    }
    
    return result;
}

Python Code:

# func: postorder traversal tree
# @param root: root node of the tree
# @return: traversal list
def postorder_traversal(root):
    if not root:
        return []
    result = []
    stack = [root]
    while stack:
        curr = stack[-1]
        result.insert(0, curr.val)
        stack.pop(-1)
        if curr.left:
            stack.append(curr.left)
        if curr.right:
            stack.append(curr.right)

    return result

No comments:

Post a Comment