//前序
void PreOrder_Nor()
{
if(_pRoot == NULL)
return;
stack<Node*> s;
s.push(_pRoot);
while(!s.empty())
{
Node* pCur = NULL;
pCur = s.top();
cout<<pCur->_data<<" ";
s.pop();
if(pCur->_pRight)
s.push(pCur->_pRight);
if(pCur->_pLeft)
s.push(pCur->_pLeft);
}
cout<<endl;
}
//中序
void InOrder_Nor()
{
if(_pRoot == NULL)
return;
stack<Node*> s;
Node* pCur = NULL;
pCur = _pRoot;
while(pCur || !s.empty())
{
while(pCur)
{
s.push(pCur);
pCur = pCur->_pLeft;
}
pCur = s.top();
cout<<pCur->_data<<" ";
s.pop();
pCur = pCur->_pRight;
}
cout<<endl;
}
// 后续遍历的非递归版本
void PostOrder_Nor()
{
if(_pRoot == NULL)
return;
stack<Node*> s;
Node* pCur = _pRoot;
Node* prev = NULL;
while(pCur || !s.empty())
{
while(pCur)
{
s.push(pCur);
pCur = pCur->_pLeft;
}
Node* temp = NULL;
temp = s.top();
if(temp->_pRight == NULL || prev == temp->_pRight)
{
cout<<temp->_data<<" ";
prev = temp;
s.pop();
}
else
pCur = temp->_pRight;
}
cout<<endl;
}
二叉树的非递归遍历(前中后)
最新推荐文章于 2022-10-29 21:20:32 发布