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?
实现:
class Solution {
public:
vector<int> postorderTraversal(TreeNode* root) {
vector<int> val;
vector<TreeNode*> record;
vector<TreeNode*> traverse;
if (root == NULL) return val;
record.push_back(root);
while (record.size() > 0)
{
TreeNode *node = record.back();
if ((node->left && std::find(traverse.begin(), traverse.end(), node->left) != traverse.end()) || node->left == NULL)
{
if ((node->right && std::find(traverse.begin(), traverse.end(), node->right) != traverse.end()) || node->right == NULL)
{
val.push_back(node->val);
record.pop_back();
traverse.push_back(node);
}
else {
record.push_back(node->right);
}
}
else {
record.push_back(node->left);
}
}
return val;
}
};