leetcode:Binary Tree Postorder Traversal

来源:互联网 发布:知乎帐号异常 编辑:程序博客网 时间:2024/06/07 11:25

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].

Note: Recursive solution is trivial, could you do it iteratively?

Subscribe to see which companies asked this question

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {    private:    void pushNodeToStack(TreeNode* root, stack<TreeNode*> &auxStack) {                TreeNode* curNode = root;        while (curNode->left != NULL || curNode->right != NULL)        {            if (curNode->right)                auxStack.push(curNode->right);            if (curNode->left)                auxStack.push(curNode->left);                            curNode = auxStack.top();        }        return;    }    public:    vector<int> postorderTraversal(TreeNode* root) {                vector<int> retVtr;        if (root == NULL)            return retVtr;                    stack<TreeNode *> auxStack;        auxStack.push(root);        pushNodeToStack(root, auxStack);                while (auxStack.size() > 0)        {            TreeNode *preNode = NULL;            while (auxStack.size() > 0 && (preNode == auxStack.top()->left || preNode == auxStack.top()->right))            {                TreeNode *curNode = auxStack.top();                preNode = curNode;                auxStack.pop();                retVtr.push_back(curNode->val);            }            if (auxStack.size() > 0)                pushNodeToStack(auxStack.top(), auxStack);        }                return retVtr;    }};



0 0