1.前序遍历
void preOrder(BinaryTree *pRoot)
{
if(pRoot == NULL)
return;
stack<BinaryTree*> pNode;
BinaryTree *pTmp;
pNode.push(pRoot);
while(!pNode.empty())
{
pTmp=pNode.top();
printf("%d ",pTmp->data);
pNode.pop();
if(pTmp->right)
pNode.push(pNode->right);
if(pTmp->left)
pNode.push(pTmp->left);
}
}
2.中序遍历
void inOrder(BinaryTree* pRoot)
{
stack<BinaryTree*> pNode;
BinaryTree *pTmp = pRoot;
while ( pTmp!=NULL || !pNode.empty())
{
while (pTmp!=NULL)
{
pNode.push(pTmp);
pTmp = pTmp->left;
}
if (!pNode.empty())
{
pTmp = pNode.top();
printf("%d ",pTmp->data);
pNode.pop();
pTmp = pTmp->right;
}
}
}
3.后序遍历(后序遍历参考的别人代码)
//参考大神的代码
void postOrder(BinaryTree *pRoot)
{
if(pRoot == NULL)
return;
stack<pair<BinaryTree*,int> > pNode;
BinaryTree *pTmp;
int unUsed;
pNode.push(make_pair(pRoot,1));
while(!pNode.empty())
{
pTmp =pNode.top().first;
unUsed=pNode.top().second;
pNode.pop();
if(unUsed)
{
pNode.push(make_pair(pTmp,0));
if(pTmp->right)
pNode.push(make_pair(pTmp->right,1));
if(pTmp->left)
pNode.push(make_pair(pTmp->left,1));
}
else
printf("%d ",pTmp->data);
}
}