归纳一下二叉树的前序中序后续遍历非递归实现
vector<int> preOreder(TreeNode* root){
stack<TreeNode*>s;
vector<int>ret;
s.push(root);
while(s.size()){
root = s.top();s.pop();
ret.push_back(root->val);
if(root->right)
s.push(root->right);
if(root->left)
s.push(root->left);
}
return ret;
}
vector<int> inOreder(TreeNode* root){
stack<TreeNode*>s;
vector<int>ret;
while(s.size() || root){
if(root){
s.push(root);
root = root->left;
}else{
root = s.top();s.pop();
ret.push_back(root->val);
root = root->right;
}
}
return ret;
}
vector<int> postOreder(TreeNode* root){
stack<TreeNode*>s1,s2;
vector<int>ret;
s1.push(root);
while(s1.size()){
root = s1.top();s1.pop();
s2.push(root);
if(root->left)
s1.push(root->left);
if(root->right)
s1.push(root->right);
}
while(s2.size()){
ret.push_back(s2.top()->val);
s2.pop();
}
return ret;
}