程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話二叉樹的非遞歸遍歷實例剖析

C說話二叉樹的非遞歸遍歷實例剖析

編輯:關於C++

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved