//二叉树的非递归中序遍历
#include<iostream>
#include<stack>
using namespace std;
//二叉树节点
struct Node{
int data;
Node* lch;
Node* rch;
};
//栈
stack<Node*> s;
//非递归中序遍历
void inorder(Node *root){
if(root==NULL)
return;
Node* node=root;
while(node!=NULL){
if(node->lch!=NULL){
if(node->rch!=NULL)
s.push(node);
node=node->lch;
}
else{
if(node->rch!=NULL){
if(node==s.top())
s.pop();
node=node->rch;
}
else{
cout<<node->data<<endl;
if(!s.empty()){
node=s.top();
s.pop();
cout<<node->data<<endl;
node=node->rch;
}
else break;
}
}
}
}