一、题目要求
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].
二、代码实现
vector<int> postorderTraversal(TreeNode* root) {
vector<int> vec;
std::pair<TreeNode*,int> w;
stack<pair<TreeNode*,int>> st;
TreeNode* tmp=root;
//null
if(tmp==NULL)
return vec;
//
bool flag=false;
while(1)
{
if((tmp->left==NULL && tmp->right==NULL)||flag)
{
vec.push_back(tmp->val);
if(!st.empty())
{
tmp=st.top().first;
flag=st.top().second;
st.pop();
}
else
break;
}
else if(tmp->left!=NULL)
{
w.first=tmp;
w.second=1;
st.push(w);
if(tmp->right!=NULL)
{
w.first=tmp->right;
w.second=0;
st.push(w);
}
tmp=tmp->left;
}
else if(tmp->right!=NULL)
{
w.first=tmp;
w.second=1;
st.push(w);
tmp=tmp->right;
}
}
return vec;
}