节点的结构体
struct TreeNode{
int value;
TreeNode *left;
TreeNode *right;
};
先序遍历
void xian(TreeNode *root){
stack<TreeNode*> s;
TreeNode *now=root;
while(now||!s.empty()){
if(now){
cout<<s.value<<endl;
s.push(now);
now=now->left;
}
else{
now=s.top();
now=now->right;
s.pop();
}
}
}
中序遍历
void zhong(TreeNode *root){
stack<TreeNode*> s;
TreeNode *now=root;
while(now||!s.empty()){
if(now){
s.push(now);
now=now->left;
}
else{
now=s.top();
cout<<s.value<<endl;
now=now->right;
s.pop();
}
}
}
后序遍历:
void hou(TreeNode *root){
stack<TreeNode*> s;
TreeNode *now=root;
TreeNode *last=NULL;
while(now){
s.push(now);
now=now->left;
}
while(!s.empty()){
now=s.top();
if(last==now->right||now->right==NULL){
cout<<now->value<<endl;
last=now;
s.pop();
}
else{
now=now->right;
while(now){
s.push(now);
now=now->left;
}
}
}
}