非遞迴實現二叉樹遍歷(前/中/後序)
阿新 • • 發佈:2019-02-12
//基本資料結構
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; } }