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法式算法設計的進修有所贊助。