本文以實例形式講述了C語言實現二叉樹的非遞歸遍歷方法。是數據結構與算法設計中常用的技巧。分享給大家供大家參考。具體方法如下:
先序遍歷:
void preOrder(Node *p) //非遞歸
{
if(!p) return;
stack s;
Node *t;
s.push(p);
while(!s.empty())
{
t=s.top();
printf("%d\n",t->data);
s.pop();
if(t->right) s.push(t->right);
if(t->left) s.push(t->left);
}
}
中序遍歷:
void inOrder(Node *p)
{
if(!p)
return;
stack< pair > s;
Node *t;
int unUsed;
s.push(make_pair(p,1));
while(!s.empty())
{
t=s.top().first;
unUsed = s.top().second;
s.pop();
if(unUsed)
{
if(t->right)
s.push( make_pair(t->right,1) );
s.push( make_pair(t,0) );
if(t->left)
s.push( make_pair(t->left,1));
}
else printf("%d\n",t->data);
}
}
后序遍歷:
void postOrder(Node *p)
{
if(!p) return;
stack > s;
Node *t;
int unUsed;
s.push(make_pair(p,1));
while(!s.empty())
{
t=s.top().first;
unUsed=s.top().second;
s.pop();
if(unUsed)
{
s.push(make_pair(t,0);
if(t->right)
s.push(make_pair(t->right,1));
if(t->left)
s.push(make_pair(t->left,1));
}
else printf("%d\n",t->data);
}
}
希望本文所述對大家C程序算法設計的學習有所幫助。