C說話二叉樹的非遞歸遍歷實例剖析。本站提示廣大學習愛好者:(C說話二叉樹的非遞歸遍歷實例剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話二叉樹的非遞歸遍歷實例剖析正文
本文以實例情勢講述了C說話完成二叉樹的非遞歸遍歷辦法。是數據構造與算法設計中經常使用的技能。分享給年夜家供年夜家參考。詳細辦法以下:
先序遍歷:
void preOrder(Node *p) //非遞歸
{
if(!p) return;
stack<Node*> 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<Node*,int> > 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<pair<Node*,int> > 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法式算法設計的進修有所贊助。