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]
.
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int>re;
if (root == NULL)
return re;
vector<pair<TreeNode*,bool>>que;
que.push_back(pair<TreeNode*, bool>(root,false));//bool标记节点的右孩子是否进入过队列
while (!que.empty())
{
TreeNode*n = que.back().first;
if (!que.back().second)
{
que.back().second = true;
if (n->right != NULL)
que.push_back(pair<TreeNode*, bool>(n->right, false));
if (n->left != NULL)
que.push_back(pair<TreeNode*, bool>(n->left,false));
if (n->left == NULL&&n->right == NULL)
{
que.pop_back(); re.push_back(n->val);
}
}
else
{
que.pop_back();
re.push_back(n->val);
}
}
return re;
}
};
accepted