#include<iostream>
#include<vector>
#include<stack>
using namespace std;
// Definition for binary tree 先序遍历 根左右
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
#if 0
class Solution { //me ok
public:
vector<int> v;
vector<int> postorderTraversal(TreeNode *root) {
if (root == NULL)
return v;
if ((*root).left != NULL)
postorderTraversal((*root).left);
if ((*root).right != NULL)
postorderTraversal((*root).right);
v.push_back((*root).val);
return v;
}
};
#endif
#if 0
class Solution { //因为这是栈结构,先进后出,所以根左右进,根右左出。
public:
vector<int> postorderTraversal(TreeNode *root)
{
vector<int> res;
if (!root)
return res;
stack<TreeNode *> st;
st.push(root);
while (st.size())
{
TreeNode *temp = st.top();
st.pop();
res.push_back(temp->val);
if (temp->left)
st.push(temp->left);
if (temp->right)
st.push(temp->right);
}
reverse(res.begin(), res.end());
return res;
}
};
#endif
#if 1 //非迭代
class Solution {
public:
vector<int> v;
stack<TreeNode*> s;
vector<int> postorderTraversal(TreeNode *root) {
if (root == NULL) {
return v;
}
s.push(root);
TreeNode *cur = NULL;
while (!s.empty()) {
cur = s.top();
if (cur->left == NULL && cur->right == NULL)
{
s.pop();
v.push_back(cur->val);
}
else {
if (cur->right != NULL)
{
s.push(cur->right);
cur->right = NULL;
}
if (cur->left != NULL) {
s.push(cur->left);
cur->left = NULL;
}
}
}
return v;
}
};
#endif