二叉树遍历-非递归
- 前序遍历(Pre-Order)
- 中序遍历(In-Order)
- 后序遍历(Post-Order)
前序遍历
//c++ 前序遍历
void preOrder(TreeNode *root){
stack<TreeNode*> s;
TreeNode *p = root;
while (p != NULL or !s.empty()){
while (p != NULL){
cout<<p->val<<endl;
s.push(p);
p = p->left;
}
if (!s.empty()){
p = s.top();
s.pop();
p = p->right;
}
}
}
中序遍历
//c++ 中序遍历
void inOrder(TreeNode *root){
stack<TreeNode*> s;
TreeNode *p = root;
while (p != NULL or !s.empty()){
while (p != NULL){
s.push(p);
p = p->left;
}
if (!s.empty()){
p = s.top();
cout<<p->val<<endl;
s.pop();
p = p->right;
}
}
}
后序遍历
//c++ 后序遍历
void postOrder(TreeNode *root){
stack<TreeNode*> s;
stack<int> t;
TreeNode *p = root;
while (p != NULL or !s.empty()){
while (p != NULL){
s.push(p);
t.push(1);
p = p->left;
}
if (t.top() == 2){
cout<< s.top()->val<<endl;
t.pop();
s.pop();
}else{
p = s.top();
t.top() = 2;
p = p->right;
}
}
}