前、中、后序非递归遍历算法
1、
vector<int> PreOrder(TreeNode *root){
if(!root) return vector<int>();
vector<int>res;
stack<TreeNode*>s;
s.push(root);
while(!s.empty()){
TreeNode *t=s.top();
s.pop();
res.push_back(t->val);
if(t->right)
s.push(t->right);
if(t->left)
s.push(t->left);
}
return res;
}
2、
vector<int> PreOrder(TreeNode* root) {
stack<TreeNode *>nodes;
vector<int>res;
while(root||!nodes.empty())
{
while(root)
{
nodes.push(root->right);
res.push_back(root->val);
root=root->left;
}
root=nodes.top();
nodes.pop();
}
return res;
}
1、
vector<int> InOrder(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> s;
TreeNode *p=root;
while(p||!s.empty()){
if(p){
s.push(p);
p = p->left;
}
else{
p = s.top();s.pop();
ans.push_back(p->val);
p=p->right;
}
}
return ans;
}
2、
vector<int> InOrder(TreeNode* root) {
vector<int> ans;
stack<TreeNode*> s;
s.push(root);
TreeNode *p;
while(!s.empty()){
while(p=s.top()){
s.push(p->left);
}
s.pop();
if(!s.empty()){
p = s.top();s.pop();
ans.push_back(p->val);
s.push(p->right);
}
}
return ans;
}
vector<vector<int>> PostOrder(TreeNode* root, int sum) {
vector<int>res;
stack<TreeNode*>sta;
TreeNode *p=root,*r=nullptr;
while(p||!sta.empty()){
if(p){
sta.push(p);
p=p->left;
}else{
p=sta.top();
if(p->right&&p->right!=r)
p=p->right;
else{
p=sta.top();
res.push_back(p->val);
sta.pop();
r=p;
p=nullptr;
}
}
}
return res;
}