亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 二叉樹的各種遍歷操作(非)遞歸.c

?? 數據結構的基本應用
?? C
字號:
/*二叉樹的各種遍歷操作*/
//#include<alloc.h> 
#include<stdio.h>
#include<malloc.h>
#include<conio.h>

/*函數結果狀態代碼*/
#define   True        1
#define   False       0
#define   Ok          1
#define   Error       0
#define   Infeasible  -1
#define   Overflow    -2
#define   Null        0
#define STACK_INIT_SIZE 100
#define Stackincrement 10
 
typedef int Status ;
typedef char TElemType;/* 抽象元素類型為char類型 */
typedef struct BiTNode {
    TElemType data;
    struct BiTNode *lchild,*rchild;/*左右孩子指針*/
}BiTNode;
typedef struct BiTNode *BiTree;
typedef struct BiTNode SElemType;

struct STACK
{
  SElemType *base;
  SElemType *top;
  int stacksize;
};

typedef struct STACK SqStack;

int InitStack(SqStack *S)
   /*構造一個空棧*/
{
  S->base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
  if(!S->base)
    exit(Overflow);/*存儲分配失敗*/
  S->top=S->base;
  S->stacksize=STACK_INIT_SIZE;
  return Ok;
}/*InitStack()*/



Status StackEmpty(SqStack *S)
  /*判斷棧S是否為空*/
{
  if(S->top==S->base) return True;
  else
    return False;
}/*StackEmpty()*/




int StackLength(SqStack *S)
  /*求棧S中的數據個數*/
{
  int i;
  SElemType *p;
  i=0;
  p=S->top;
  while(p!=S->base)
    {
      p--;
      i++;
    }/*while*/
  return i;
}/*StackLength()*/





int GetTop(SqStack *S,SElemType **e)
  /*若棧不空,則用e返回S的棧頂元素,并返回Ok,否則返回Error*/
{
  if(S->top==S->base)
    return Error;
  else 
    {
      *e=S->top-1;
      return Ok;
    }/*else*/
}/*GetTop()*/



int Push(SqStack *S,SElemType *e)
  /*插入元素e為新的棧頂元素*/
{
  if(S->top-S->base>=S->stacksize)/*棧滿,追加存儲空間*/
    {
      S->base=(SElemType*)realloc(S->base,(S->stacksize+Stackincrement)*sizeof(SElemType));
      if(!S->base)exit(Overflow);
      S->top=S->base+S->stacksize;
      S->stacksize+=Stackincrement;
    }/*if*/
  S->top->data=e->data;
  S->top->rchild=e->rchild;
  S->top->lchild=e->lchild;
  ++S->top;
}/*Push()*/




int Pop(SqStack *S,SElemType **e)
  /*若棧不空,則刪除S的棧頂元素,用e返回其值,并返回Ok;否則返回Error*/
{
  if(S->top==S->base)
    return Error;
  else
    {
      (*e)->data=(S->top-1)->data;
      (*e)->rchild=(S->top-1)->rchild;
      (*e)->lchild=(S->top-1)->lchild;
      --S->top;
    }/*else*/
  return Ok;
}/*Pop()*/



int CreateBiTree(BiTNode **T)
  /*  按先序次次序輸入二叉樹終結點的值(一個字符),空格字符表示空樹,構造二叉鏈表表示的二叉樹T  */
{
  TElemType ch;
  scanf("%c",&ch);
  if(ch=='#')
    (*T)=Null;
  else
    {
      (*T)=(BiTNode*)malloc(sizeof(BiTNode));
      if(!(*T))
        exit(Overflow);
      (*T)->data=ch;  /*  生成根節點  */
      CreateBiTree(&(*T)->lchild);  /*  構造左子樹  */
      CreateBiTree(&(*T)->rchild);  /*  構造右子樹  */
    }/*else*/
  return Ok;
}  /*  CreateBiTree()  */



int PreOrderTraverse(BiTree T,int (*Visit)(TElemType))
  /*采用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數      */
  /*先序遍歷二叉樹T的遞歸算法,對每個數據元素調用函數Visit     */
  /*最簡單的Visit函數是:                                      */
  /*                        int PrintElememt(TElemType e)      */
  /*                          輸出元素e的值                    */
  /*                        {                                  */
  /*                          printf(e);  實用時,加上格式串   */ 
  /*                          return Ok;                       */
  /*                        }                                  */
  /*調用實例:PreOrderTraverse(T,PrintElement)                 */
{
  if(T)
    {
      if(Visit(T->data))
        if(PreOrderTraverse(T->lchild,Visit))
          if(PreOrderTraverse(T->rchild,Visit))
            return Ok;
      return Error;
    }
  else
    return Ok;
}/*PreOrderTraverse()*/
  


int InOrderTraverse(BiTree T,int (*Visit)(TElemType))
  /*中序遍歷二叉樹T的遞歸算法*/
{
  if(T)
    {       
      if(InOrderTraverse(T->lchild,Visit))
        if(Visit(T->data))
          if(InOrderTraverse(T->rchild,Visit))
            return Ok;
      return Error;
    }
  else
    return Ok;
}/*InOrderTraverse()*/





int PostOrderTraverse(BiTree T,int (*Visit)(TElemType))
  /*后序遍歷二叉樹T的遞歸算法*/
{
  if(T)
    {       
      if(PostOrderTraverse(T->lchild,Visit))
        if(PostOrderTraverse(T->rchild,Visit))
	  if(Visit(T->data))
            return Ok;
      return Error;
    }
  else
    return Ok;
}/*PostOrderTraverse()*/

 


int InOrderTraverse1(BiTree T,int(*Visit)(TElemType))
  /*采用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數。*/
  /*中序遍歷二叉樹T的非遞歸算法,對每個數據元素調用函數Visit*/
{
  SqStack *S;
  SElemType *p;

  S=(SqStack*)malloc(sizeof(SqStack));
  p=(SElemType*)malloc(sizeof(SElemType));
  
  InitStack(S);
  Push(S,T);  /*根指針進棧*/
  while(!StackEmpty(S))
    {
      while(GetTop(S,&p)&&p->data>='a'&&p->data<='z')
        {Push(S,p->lchild);}  /*向左走到盡頭*/
      Pop(S,&p);  /*空指針退棧*/
      if(!StackEmpty(S))  /*訪問結點,向右一步*/
        {
          Pop(S,&p);
          if(!Visit(p->data))
            return Error;
          Push(S,p->rchild);
        }/*if*/
    }/*while*/                                                                     
  return Ok;
}/*InOrderTraverse1()*/



int PreOrderTraverse1(BiTree T,int(*Visit)(TElemType))
  /*采用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數。*/
  /*先序遍歷二叉樹T的非遞歸算法,對每個數據元素調用函數Visit*/
{
  SqStack *S;
  SElemType *p;

  S=(SqStack*)malloc(sizeof(SqStack));
  p=(SElemType*)malloc(sizeof(SElemType));
  
  InitStack(S);
  Push(S,T);/*根指針進棧*/
  while(!StackEmpty(S))
    {
      while(GetTop(S,&p)&&p->data>='a'&&p->data<='z')  /*先遍歷左子樹*/
        {
          if(!Visit(p->data))
            return Error;
          p=p->lchild;
          Push(S,p);
        }/*while*/
      Pop(S,&p);  /*空指針退棧*/
      if(!StackEmpty(S))  /*通過下一次循環中的內嵌while實現右子樹遍歷*/
        {
          Pop(S,&p);
          p=p->rchild;
          Push(S,p);       
        }/*if*/
    }/*while*/                                                                     
  return Ok;
}/*PreOrderTraverse1()*/



int PostOrderTraverse1(BiTree T,int(*Visit)(TElemType))
  /*采用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數。*/
  /*后序遍歷二叉樹T的非遞歸算法,對每個數據元素調用函數Visit*/
{
  SqStack *S;
  SElemType *p,*t;
  int tag[100];

  S=(SqStack*)malloc(sizeof(SqStack));
  p=(SElemType*)malloc(sizeof(SElemType));
  t=(SElemType*)malloc(sizeof(SElemType));
  
  InitStack(S);
  p=T;/*Push(S,T);*/
  do
    {
      while(p->data>='a'&&p->data<='z')
        {
          Push(S,p);          
          tag[StackLength(S)]=0;
          p=p->lchild;
        }  /*向左走到盡頭*/
      if(!StackEmpty(S))  /*訪問結點,向右一步*/
        {
          if(GetTop(S,&t)&&tag[StackLength(S)]==1)
            {
              Pop(S,&t);
              if(!Visit(t->data))
                return Error;
            }/*if*/
          else
            {
              GetTop(S,&p);
              if(!StackEmpty(S))
                {
                  p=p->rchild;  /*掃描右子樹*/
                  tag[StackLength(S)]=1;
                }
            }
        }/*while*/
    }while(p->data>='a'&&p->data<='z'||!StackEmpty(S)); 
  return Ok;
}/*PostOrderTraverse1()*/



int PrintTree(TElemType e)
  /*輸出二叉樹中的每一個結點*/
{
  printf("%c  ",e);
  return Ok;
}



main()
{
  BiTree T;
  CreateBiTree(&T);
  printf("preOrder:");
  PreOrderTraverse(T,PrintTree);
  printf("\n");
  printf("InOrder:");
  InOrderTraverse(T,PrintTree);
  printf("\n");
  printf("postOrder:");
  PostOrderTraverse(T,PrintTree);
  printf("\n");
  printf("not recursion InOrder:");
  InOrderTraverse1(T,PrintTree);
  printf("\n");
  printf("not recursion PreOrder:");
  PreOrderTraverse1(T,PrintTree);
  printf("\n");
  printf("not recursion PostOrder:");
  PostOrderTraverse1(T,PrintTree);
  printf("\n");
}



?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
aaa亚洲精品| 欧美男生操女生| 91精品国产aⅴ一区二区| 欧美在线免费播放| 日本不卡一区二区三区高清视频| 在线亚洲高清视频| 三级在线观看一区二区| 日韩欧美国产三级| 国产盗摄女厕一区二区三区| 中文字幕乱码日本亚洲一区二区| 激情久久久久久久久久久久久久久久| 欧美成人精精品一区二区频| 高清在线观看日韩| 18成人在线视频| 欧美日韩中文另类| 另类成人小视频在线| 中文字幕乱码久久午夜不卡 | 夜夜精品浪潮av一区二区三区| 99re这里只有精品6| 亚洲国产人成综合网站| 精品美女在线播放| 成人蜜臀av电影| 午夜视频一区在线观看| 26uuu国产在线精品一区二区| 成人免费毛片aaaaa**| 亚洲一二三区视频在线观看| 精品久久人人做人人爱| 色综合视频在线观看| 另类小说综合欧美亚洲| 国产精品乱人伦| 欧美日韩国产天堂| 岛国精品在线播放| 婷婷六月综合亚洲| 国产精品久久综合| 欧美一卡在线观看| 97久久超碰国产精品| 久热成人在线视频| 亚洲欧洲另类国产综合| 日韩欧美一区电影| 欧美丝袜自拍制服另类| 国产一区91精品张津瑜| 亚洲mv在线观看| 日韩毛片在线免费观看| 精品免费一区二区三区| 9i看片成人免费高清| 久久99精品久久久| 亚洲va国产va欧美va观看| 中日韩免费视频中文字幕| 日韩欧美一二三区| 欧美系列一区二区| 99久久免费视频.com| 国产精品888| 免费看黄色91| 亚洲大片免费看| 亚洲精品一二三| 国产精品美女久久久久久久久 | 国产99久久久精品| 久久99精品久久久久久国产越南| 亚洲香蕉伊在人在线观| 亚洲欧洲精品天堂一级| 久久精品一区蜜桃臀影院| 日韩一区二区视频在线观看| 欧美日韩一区二区欧美激情| 色婷婷综合中文久久一本| 成人免费视频一区| 国产91精品免费| 国产乱妇无码大片在线观看| 韩国欧美国产1区| 蜜臀av性久久久久蜜臀aⅴ| 午夜精品视频一区| 五月天激情综合| 亚洲成人久久影院| 亚洲二区视频在线| 亚洲成av人片一区二区梦乃 | 日本中文在线一区| 五月综合激情网| 性做久久久久久久免费看| 一区二区高清免费观看影视大全| 亚洲欧洲www| 亚洲婷婷国产精品电影人久久| 国产精品护士白丝一区av| 国产精品久久久久精k8| 中文字幕制服丝袜一区二区三区 | 日韩毛片视频在线看| 国产精品电影一区二区| 国产精品灌醉下药二区| 亚洲私人影院在线观看| 亚洲精品伦理在线| 亚洲高清不卡在线观看| 偷窥国产亚洲免费视频| 麻豆精品国产91久久久久久| 久久不见久久见免费视频7| 黑人精品欧美一区二区蜜桃| 国产成人小视频| 91女厕偷拍女厕偷拍高清| 色噜噜狠狠一区二区三区果冻| 在线一区二区三区四区五区 | 免费成人av在线| 精品亚洲porn| 丰满少妇久久久久久久| 97久久超碰国产精品| 欧美日本一区二区三区| 精品国产伦一区二区三区观看方式 | 日本美女视频一区二区| 加勒比av一区二区| heyzo一本久久综合| 欧美日产国产精品| 国产校园另类小说区| 亚洲欧美另类小说视频| 麻豆视频观看网址久久| 国产69精品久久久久毛片| 色婷婷精品大在线视频| 日韩一级片网址| 中文字幕av在线一区二区三区| 一级女性全黄久久生活片免费| 免费黄网站欧美| 99热在这里有精品免费| 欧美一区二区视频免费观看| 中文字幕av在线一区二区三区| 亚洲国产成人av| 国产成人在线视频网站| 欧美三级日韩三级国产三级| 2020国产精品自拍| 亚洲图片欧美色图| 成人精品电影在线观看| 欧美福利视频导航| 中文乱码免费一区二区| 日本亚洲天堂网| 99久久久国产精品免费蜜臀| 日韩一区二区三区四区五区六区| 国产精品久久国产精麻豆99网站| 日本欧美久久久久免费播放网| 成人免费看的视频| 日韩美女在线视频| 香蕉久久一区二区不卡无毒影院| 高清成人免费视频| 日韩欧美激情一区| 亚洲第一综合色| 91捆绑美女网站| 国产色91在线| 久久精品国内一区二区三区 | 91精品国产一区二区三区| 国产精品国产三级国产aⅴ中文| 另类小说图片综合网| 欧美日韩国产综合一区二区三区| 国产精品高清亚洲| 成人一区二区三区在线观看| 精品欧美一区二区三区精品久久 | 欧美肥妇bbw| 一区二区三区小说| 99精品视频在线播放观看| 久久久久久久网| 另类综合日韩欧美亚洲| 91精品国产乱码久久蜜臀| 亚洲一二三四区不卡| 99国产一区二区三精品乱码| 国产日产欧美一区二区视频| 久久66热re国产| 日韩一区二区三免费高清| 亚洲123区在线观看| 欧美三级一区二区| 亚洲第一主播视频| 欧美丰满少妇xxxxx高潮对白| 亚洲一区二区三区四区中文字幕| 99热99精品| 亚洲视频1区2区| 95精品视频在线| 亚洲天堂精品在线观看| 91在线精品秘密一区二区| 国产精品国产三级国产aⅴ原创 | 欧美高清一级片在线观看| 国产精品原创巨作av| 国产日产精品一区| 东方aⅴ免费观看久久av| 久久久欧美精品sm网站| 国产精品一卡二卡| 国产精品水嫩水嫩| 成人avav影音| 亚洲欧美一区二区久久| 在线免费视频一区二区| 亚洲福利一区二区三区| 日韩片之四级片| 国产麻豆视频一区二区| 国产亚洲一区二区在线观看| 国产jizzjizz一区二区| 亚洲乱码国产乱码精品精可以看| 色网站国产精品| 日韩高清中文字幕一区| 精品免费日韩av| 成人精品免费看| 亚洲欧美一区二区三区极速播放| 欧美日韩一区二区三区高清| 久久成人羞羞网站| 国产精品伦理一区二区| 欧美日韩aaaaa| 国产盗摄一区二区三区| 一区二区国产视频| 日韩欧美国产一二三区| 成人高清免费在线播放| 亚洲成人av一区|