//基本數據結構
template<class T>
struct BinaryTreeNode
{
T _data;
BinaryTreeNode<T>* _left;
BinaryTreeNode<T>* _right;
BinaryTreeNode(const T& x)
:_data(x)
,_left(NULL)
,_right(NULL)
{
}
};
//前序遍歷
void _PrevOrder_NonR(Node* root)
{
Node* cur=root;
stack<Node*> s;
while(!s.empty() || cur)
{
while(cur)
{
s.push(cur);
cout<<cur->_data<<" ";
cur=cur->_left;
}
Node* _top=s.top();
s.pop();
cur=_top->_right;
}
}
//中序遍歷
void _InOrder_NonR(Node* root)
{
Node* cur=root;
stack<Node*> s;
while(!s.empty() || cur)
{
while(cur)
{
s.push(cur);
cur=cur->_left;
}
Node* _top=s.top();
s.pop();
cout<<_top->_data<<" ";
cur=_top->_right;
}
}
//後序遍歷
void _PostOrder_NonR(Node* root)
{
Node* cur=root;
Node* prev=NULL;
stack<Node*> s;
while(!s.empty() || cur)
{
while(cur)
{
s.push(cur);
cur=cur->_left;
}
Node* _top=s.top();
if(_top->_right == prev || _top->_right == NULL)
{
cout<<_top->_data<<" ";
prev=_top;
s.pop();
}
else
cur=_top->_right;
}
}