欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹[五篇范文]

      時(shí)間:2019-05-14 04:20:45下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹》。

      第一篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹

      班級:380911班

      學(xué)號:57000211 姓名:徐敏

      實(shí)驗(yàn)報(bào)告

      一,實(shí)驗(yàn)?zāi)康模?/p>

      ·掌握二叉樹的鏈?zhǔn)酱鎯Y(jié)構(gòu); ·掌握構(gòu)造二叉樹的方法;

      ·加深對二叉樹的中序遍歷的理解; 二,實(shí)驗(yàn)方法:

      ·用遞歸調(diào)用算法中序遍歷二叉樹。三,實(shí)驗(yàn)步驟:

      ·通過鏈?zhǔn)酱鎯⒁活w二叉樹。

      ·設(shè)計(jì)一個(gè)算法實(shí)現(xiàn)中序遍歷二叉樹。四,具體實(shí)驗(yàn)步驟:

      #include #include #define LEFT 0 #define RIGHT 1 #define TRUE 1 #define FALSE 0

      typedef struct _BTNODE{ char c;struct _BTNODE *lchild;struct _BTNODE *rchild;}BTNODE,*PBTNODE;

      void PrintBTree(PBTNODE p,int depth);void ConstructBTree(PBTNODE p);void InorderTraverse(PBTNODE p);

      void main(){ PBTNODE p;p=(PBTNODE)calloc(1,sizeof(BTNODE));printf(“Input the data:”);ConstructBTree(p);PrintBTree(p,0);printf(“Now InorderTraverse:”);InorderTraverse(p);printf(“nPress any key to continue...”);getchar();}

      void PrintBTree(PBTNODE p,int depth){

      班級:380911班

      學(xué)號:57000211 姓名:徐敏

      int i;if(p==NULL){

      return;}else{ for(i=0;i

      printf(“--”);} printf(“>”);

      printf(“%cn”,p->c);

      PrintBTree(p->lchild,depth+1);

      PrintBTree(p->rchild,depth+1);} }

      void ConstructBTree(PBTNODE p){ int side;char c;side=LEFT;while(TRUE){

      scanf(“%c”,&c);

      if(c=='n'){

      //printf(“EOFn”);

      return;

      } // printf(“%dn”,c);

      switch(c){

      case '|':

      break;

      case')':

      return;

      case',':

      side=RIGHT;

      break;

      case'(':

      if(side==LEFT){

      if(p->lchild==NULL){

      p->lchild=(PBTNODE)calloc(1,sizeof(BTNODE));

      }

      ConstructBTree(p->lchild);

      }else{

      if(p->rchild==NULL){

      p->rchild=(PBTNODE)calloc(1,sizeof(BTNODE));

      }

      班級:380911班

      學(xué)號:57000211 姓名:徐敏

      ConstructBTree(p->rchild);

      }

      break;

      default:

      if(side==LEFT){

      p->lchild=(PBTNODE)calloc(1,sizeof(BTNODE));

      p->lchild->c=c;

      }else{

      p->rchild=(PBTNODE)calloc(1,sizeof(BTNODE));

      p->rchild->c=c;

      }

      } } }

      void InorderTraverse(PBTNODE p){ if(p==NULL){

      return;}else{

      InorderTraverse(p->lchild);

      printf(“[%c] ”,p->c);

      InorderTraverse(p->rchild);} return;} 五,實(shí)驗(yàn)過程:

      ·輸出:Input the date;

      ·輸入:1(2(3,4),5(6,7));

      ·輸出:Now InorderTraverse:【3】【2】【4】【1】【6】【5】【7】;六,上機(jī)實(shí)驗(yàn)體會:

      ·體會到熟練掌握各種程序算法的重要性;

      ·通過上機(jī)練習(xí),充分理解了鏈?zhǔn)浇⒍鏄涞乃惴ǎ?/p>

      ·形象的了解二叉樹的結(jié)構(gòu),能夠熟練的進(jìn)行先序,中序,后序遍歷二叉樹。

      第二篇:數(shù)據(jù)結(jié)構(gòu)-二叉樹的遍歷實(shí)驗(yàn)報(bào)告

      實(shí)驗(yàn)報(bào)告

      課程名:數(shù)據(jù)結(jié)構(gòu)(C語言版)實(shí)驗(yàn)名:二叉樹的遍歷 姓名:

      班級:

      學(xué)號:

      時(shí)間:2014.11.03

      一 實(shí)驗(yàn)?zāi)康呐c要求

      1.掌握二叉樹的存儲方法 2.掌握二叉樹的三種遍歷方法

      3.實(shí)現(xiàn)二叉樹的三種遍歷方法中的一種 二 實(shí)驗(yàn)內(nèi)容

      ? 接受用戶輸入一株二叉樹

      ? 輸出這株二叉樹的前根, 中根, 后根遍歷中任意一種的順序 三 實(shí)驗(yàn)結(jié)果與分析

      //*********************************************************** //頭文件

      #include #include //*********************************************************** //宏定義

      #define OK 1 #define ERROR 0 #define OVERFLOW 0

      //***********************************************************

      typedef struct BiTNode { //二叉樹二叉鏈表存儲結(jié)構(gòu) char data;struct BiTNode *lChild,*rChild;}BiTNode,*BiTree;//*********************************************************** int CreateBiTree(BiTree &T){ //按先序次序輸入二叉中樹結(jié)點(diǎn)的值,空格表示空樹 //構(gòu)造二叉鏈表表示的二叉樹T char ch;fflush(stdin);scanf(“%c”,&ch);if(ch==' ')T=NULL;else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))return(OVERFLOW);T->data=ch;CreateBiTree(T->lChild);CreateBiTree(T->rChild);} return(OK);} //********************************************************* void PreOrderTraverse(BiTree T){ //采用二叉鏈表存儲結(jié)構(gòu),先序遍歷二叉樹的遞歸算法 if(T){ printf(“%c”,T->data);PreOrderTraverse(T->lChild);PreOrderTraverse(T->rChild);} } /***********************************************************/ void InOrderTraverse(BiTree T){ //采用二叉鏈表存儲結(jié)構(gòu),中序遍歷二叉樹的遞歸算法 if(T){ InOrderTraverse(T->lChild);printf(“%c”,T->data);InOrderTraverse(T->rChild);} }

      //*********************************************************** void PostOrderTraverse(BiTree T){ //采用二叉鏈表存儲結(jié)構(gòu),后序遍歷二叉樹的遞歸算法 if(T){ PostOrderTraverse(T->lChild);PostOrderTraverse(T->rChild);printf(“%c”,T->data);} }

      //*********************************************************** void main(){ //主函數(shù)分別實(shí)現(xiàn)建立并輸出先、中、后序遍歷二叉樹

      printf(“please input your tree follow the PreOrder:n”);BiTNode *Tree;CreateBiTree(Tree);printf(“n先序遍歷二叉樹:”);PreOrderTraverse(Tree);printf(“n中序遍歷二叉樹:”);InOrderTraverse(Tree);printf(“n后序遍歷二叉樹:”);PostOrderTraverse(Tree);}

      圖1:二叉樹的遍歷運(yùn)行結(jié)果

      第三篇:數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告-二叉樹的實(shí)現(xiàn)與遍歷

      《數(shù)據(jù)結(jié)構(gòu)》 第六次實(shí)驗(yàn)報(bào)告

      學(xué)生姓名 學(xué)生班級 學(xué)生學(xué)號 指導(dǎo)老師

      重慶郵電大學(xué)計(jì)算機(jī)學(xué)院 計(jì)算機(jī)專業(yè)實(shí)驗(yàn)中心

      一、實(shí)驗(yàn)內(nèi)容

      1)采用二叉樹鏈表作為存儲結(jié)構(gòu),完成二叉樹的建立,先序、中序和后序以及按層次遍歷的操作,求所有葉子及結(jié)點(diǎn)總數(shù)的操作。2)輸出樹的深度,最大元,最小元。

      二、需求分析

      遍歷二叉樹首先有三種方法,即先序遍歷,中序遍歷和后序遍歷。遞歸方法比較簡單,首先獲得結(jié)點(diǎn)指針如果指針不為空,且有左子,從左子遞歸到下一層,如果沒有左子,從右子遞歸到下一層,如果指針為空,則結(jié)束一層遞歸調(diào)用。直到遞歸全部結(jié)束。下面重點(diǎn)來講述非遞歸方法: 首先介紹先序遍歷:

      先序遍歷的順序是根 左 右,也就是說先訪問根結(jié)點(diǎn)然后訪問其左子再然后訪問其右子。具體算法實(shí)現(xiàn)如下:如果結(jié)點(diǎn)的指針不為空,結(jié)點(diǎn)指針入棧,輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)指針指向其左子,如果結(jié)點(diǎn)的指針為空,表示左子樹訪問結(jié)束,棧頂結(jié)點(diǎn)指針出棧,指針指向其右子,對其右子樹進(jìn)行訪問,如此循環(huán),直至結(jié)點(diǎn)指針和棧均為空時(shí),遍歷結(jié)束。

      再次介紹中序遍歷:

      中序遍歷的順序是左 根 右,中序遍歷和先序遍歷思想差不多,只是打印順序稍有變化。具體實(shí)現(xiàn)算法如下:如果結(jié)點(diǎn)指針不為空,結(jié)點(diǎn)入棧,指針指向其左子,如果指針為空,表示左子樹訪問完成,則棧頂結(jié)點(diǎn)指針出棧,并輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)指針指向其右子,對其右子樹進(jìn)行訪問。如此循環(huán)直至結(jié)點(diǎn)指針和棧均為空,遍歷結(jié)束。最后介紹后序遍歷:

      后序遍歷的順序是左 右 根,后序遍歷是比較難的一種,首先需要建立兩個(gè)棧,一個(gè)用來存放結(jié)點(diǎn)的指針,另一個(gè)存放標(biāo)志位,也是首先訪問根結(jié)點(diǎn),如果結(jié)點(diǎn)的指針不為空,根結(jié)點(diǎn)入棧,與之對應(yīng)的標(biāo)志位也隨之入標(biāo)志位棧,并賦值0,表示該結(jié)點(diǎn)的右子還沒有訪問,指針指向該結(jié)點(diǎn)的左子,如果結(jié)點(diǎn)指針為空,表示左子訪問完成,父結(jié)點(diǎn)出棧,與之對應(yīng)的標(biāo)志位也隨之出棧,如果相應(yīng)的標(biāo)志位值為0,表示右子樹還沒有訪問,指針指向其右子,父結(jié)點(diǎn)再次入棧,與之對應(yīng)的標(biāo)志位也入棧,但要給標(biāo)志位賦值為1,表示右子訪問過。如果相應(yīng)的標(biāo)志位值為1,表示右子樹已經(jīng)訪問完成,此時(shí)要輸出相應(yīng)結(jié)點(diǎn)的數(shù)據(jù),同時(shí)將結(jié)點(diǎn)指針賦值為空,如此循環(huán)直至結(jié)點(diǎn)指針和棧均為空,遍歷結(jié)束。

      三、詳細(xì)設(shè)計(jì)

      源代碼:

      #include #define MAX 100 //表示棧的最大容量 #define FULL 99//表示棧滿 #define EMPTY-1//表示???/p>

      typedef struct Tnode //定義結(jié)點(diǎn) {

      char data;//存儲結(jié)點(diǎn)數(shù)據(jù)

      struct Tnode *left;//定義結(jié)點(diǎn)左子指針 struct Tnode *right;//定義右子指針

      }Tnode,*Pnode;//聲明Tnode類型的變量和指針 typedef struct Stack//定義棧 { Pnode pnode[MAX];//存放數(shù)據(jù) int p;//棧頂指針

      }Stack,*Pstack;//定義Stack類型的變量和指針 void Push(Pstack pstack,Pnode pnode)//入棧 {

      } Pnode Pop(Pstack pstack)//出棧 { } Pnode Top(Pstack pstack)//看棧頂元素 { } int Isempty(Pstack pstack)//棧判空 {

      } int Isfull(Pstack pstack)//棧滿 {

      } void Initstack(Pstack pstack)//初始化棧 if(pstack->p==FULL)else return 0;return 1;if(pstack->p==EMPTY)else return 0;;return 1;return pstack->pnode[pstack->p];return pstack->pnode[pstack->p--];pstack->p ++;pstack->pnode[pstack->p] = pnode;//賦值

      { } void Inittnode(Pnode root,Pnode left,Pnode right,char data)//初始化結(jié)點(diǎn) {

      } void PreorderR(Pnode proot)//遞歸先序遍歷算法 {

      } void InorderR(Pnode proot)//遞歸中序遍歷算法 {

      } void PostorderR(Pnode proot)//遞歸后序遍歷算法 {

      } void PreorderI(Pnode proot,Pstack pstack)//非遞歸先序遍歷算法 {

      Initstack(pstack);//初始化棧

      while(proot||!Isempty(pstack))//如果??詹⑶医Y(jié)點(diǎn)指針空,則結(jié)束循環(huán) {

      if(proot){ printf(“%2c”,proot->data);if(proot){

      } PostorderR(proot->left);PostorderR(proot->right);printf(“%2c”,proot->data);if(proot){

      }

      InorderR(proot->left);printf(“%2c”,proot->data);InorderR(proot->right);if(proot){

      } printf(“%2c”,proot->data);PreorderR(proot->left);PreorderR(proot->right);root->left=left;root->right = right;root->data = data;pstack->p=EMPTY;

      }

      }

      } else {

      } if(Isfull(pstack))//如果棧滿不能執(zhí)行入棧操作 {

      } Push(pstack,proot);//入棧 proot=proot->left;//指針指向左子 printf(“棧滿,不能執(zhí)行入棧操作!”);return;if(Isempty(pstack))//??諘r(shí)不能出棧 {

      } proot = Pop(pstack);//執(zhí)行出棧操作 proot=proot->right;//指針指向右子 printf(“棧空,不能執(zhí)行出棧操作!”);return;void InorderI(Pnode proot,Pstack pstack)//非遞歸中序遍歷算法 {

      Initstack(pstack);//初始化棧

      while(proot||!Isempty(pstack))//循環(huán)結(jié)束條件 {

      if(proot){

      } else {

      if(Isempty(pstack)){

      } proot = Pop(pstack);//出棧

      printf(“%2c”,proot->data);//打印數(shù)據(jù) printf(“棧空,不能執(zhí)行出棧操作!”);return;if(Isfull(pstack)){

      } Push(pstack,proot);//執(zhí)行入棧操作 proot = proot->left;//指針指向左子 printf(“棧滿,不能執(zhí)行入棧操作!”);return;

      }

      } } proot=proot->right;//指針指向右子

      void PostorderI(Pnode proot,Pstack pstack)//非遞歸后續(xù)遍歷算法 {

      } void main(){ int flags[MAX];//定義標(biāo)志位棧 int p =-1;//初始化標(biāo)志位棧 int flag;//存放標(biāo)志位 Initstack(pstack);//初始化棧

      while(proot||!Isempty(pstack))//循環(huán)結(jié)束條件 {

      } if(proot){

      } else {

      } proot = Pop(pstack);//指針出棧 flag = flags[p--];//相應(yīng)標(biāo)志位出棧

      if(flag==0)//如果標(biāo)志位為0表示右子還未訪問過 {

      } else {

      } printf(“%2c”,proot->data);//打印數(shù)據(jù) proot = NULL;//將結(jié)點(diǎn)指針置空 flag =1;//將標(biāo)志位置1,右子已訪問 flags[++p] = flag;//標(biāo)志位入棧 Push(pstack,proot);//結(jié)點(diǎn)入棧 if(Isfull(pstack)){

      } flags[++p] = 0;//標(biāo)志位置0,并入棧 Push(pstack,proot);//結(jié)點(diǎn)入棧 proot=proot->left;//指針指向左子 printf(“棧滿,不能執(zhí)行入棧操作!”);return;

      proot = proot->right;//指針指向右子

      Tnode A,B,C,D,E,F,G;//聲明結(jié)點(diǎn)變量 Stack stack;//聲明棧

      Inittnode(&A,&B,&C,'A');//初始化結(jié)點(diǎn) Inittnode(&B,NULL,&D,'B');Inittnode(&C,&E,&F,'C');Inittnode(&D,NULL,NULL,'D');Inittnode(&E,NULL,NULL,'E');Inittnode(&F,&G,NULL,'F');Inittnode(&G,NULL,NULL,'G');printf(“你定義的樹的結(jié)構(gòu)是:n”);printf(“A(B(D)C(E F(G)))n”);printf(“=====================下面是遍歷結(jié)果====================n”);printf(“=====================遞歸先序遍歷:====================n”);PreorderR(&A);printf(“n”);printf(“=====================非遞歸先序遍歷:==================n”);PreorderI(&A,&stack);printf(“n”);printf(“=====================遞歸中序遍歷:====================n”);InorderR(&A);printf(“n”);printf(“=====================非遞歸中序遍歷:==================n”);InorderI(&A,&stack);printf(“n”);PostorderR(&A);printf(“n”);PostorderI(&A,&stack);

      printf(“n”);

      /*一下是調(diào)用相應(yīng)的函數(shù)輸出遍歷結(jié)果*/

      }

      printf(“=====================遞歸后序遍歷:====================n”);

      printf(“=====================非遞歸后序遍歷:==================n”);

      五、遇到的問題及解決辦法

      這部分我主要遇到如下兩個(gè)問題,其內(nèi)容和解決方法如下所列:

      執(zhí)行程序時(shí)程序停止運(yùn)行,其效果如圖:

      解決方法:看到程序停止運(yùn)行,推測可能的原因:遇到死循環(huán)、參數(shù)設(shè)置不合理或者結(jié)構(gòu)體沒有造好。首先對結(jié)構(gòu)體進(jìn)行了檢查,各個(gè)成員聲明正常無誤,在對程序進(jìn)行調(diào)試,程序正常跳出循環(huán),因此最可能是自定義函數(shù)的參數(shù)設(shè)置的不合理,因此對調(diào)用的自定義函數(shù)進(jìn)行相應(yīng)的改動,將參數(shù)由具體類型改為指針類型后,程序正常運(yùn)行。

      程序不停的輸出同一個(gè)結(jié)點(diǎn)的數(shù)據(jù),其效果入圖:

      解決方法:分析運(yùn)行結(jié)果可知,第一不停的輸出證明遇到了死循環(huán),第二輸出的是同一個(gè)結(jié)點(diǎn)的數(shù)據(jù),表示指針沒有按預(yù)期進(jìn)行指向,首先對程序進(jìn)行調(diào)試,發(fā)現(xiàn)程序沒有添加循環(huán)結(jié)束條件,添加循環(huán)結(jié)束條件后,只能輸出樹的部分結(jié)點(diǎn)的數(shù)據(jù),對標(biāo)志位進(jìn)行修改后,程序運(yùn)行正常,也能正確輸出遍歷結(jié)果。

      六、心得體會

      通過這次作業(yè)真的受益匪淺,感觸良多:

      首先,要提高編程能力,必須多動手,多實(shí)踐,而不是僅僅局限在書本上,更不能眼高手低。眼高手低,懶得動手,這就犯了編程人員的大忌。大一我們開始接觸C語言,這是我們接觸到的第一種編程語言,但是當(dāng)時(shí)徒有對編程的興趣,卻沒有付諸行動,動手少,結(jié)果考試險(xiǎn)過,通過這次作業(yè),我再次看了C語言課本,邊看邊寫代碼,理解快,印象深刻,思維也活躍許多,狀態(tài)也好,真正的意識到,編程能力需要靠實(shí)踐來提升。當(dāng)自己寫出意想的程序后,真的有些成就感。再者,在吳老師的指導(dǎo)和要求下,我們改掉了很多的編程壞習(xí)慣的同時(shí)也養(yǎng)成了良好的編程習(xí)慣,另一方面我們態(tài)度端正了很多,認(rèn)真完成好每一項(xiàng)任務(wù),這樣無形中提高了對自己的要求,同時(shí)也增強(qiáng)了我們的動手能力和編程能力。

      七、附錄 運(yùn)行結(jié)果截圖。

      第四篇:二叉樹遍歷課程設(shè)計(jì)】

      數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)報(bào)告

      學(xué)院: 班級: 學(xué)號:

      姓名:

      實(shí)驗(yàn)名稱:二叉樹的建立與遍歷

      一、實(shí)驗(yàn)?zāi)康模?/p>

      1.掌握二叉樹的二叉鏈表存儲結(jié)構(gòu); 2.掌握二叉樹創(chuàng)建方法;

      3.掌握二叉樹的先序、中序、后序的遞歸實(shí)現(xiàn)方法。

      二、實(shí)驗(yàn)內(nèi)容和要求:

      創(chuàng)建二叉樹,分別對該二叉樹進(jìn)行先序、中序、后序遍歷,并輸出遍歷結(jié)果。

      三、叉樹的建立與遍歷代碼如下:

      #include #include struct tnode//結(jié)點(diǎn)結(jié)構(gòu)體 {

      };typedef struct tnode TNODE;

      TNODE *creat(void){ TNODE *root,*p;TNODE *queue[50];char data;struct tnode *lchild,*rchild;

      int front=0,rear=-1,counter=0;//初始隊(duì)列中需要的變量front、rear和計(jì)數(shù)器counter char ch;printf(“建立二叉樹,請輸入結(jié)點(diǎn):(#表示虛節(jié)點(diǎn),!表示結(jié)束)n”);

      ch=getchar();

      while(ch!='!'){ if(ch!='#')

      { p=(TNODE *)malloc(sizeof(TNODE));

      p->data=ch;

      p->lchild=NULL;

      p->rchild=NULL;rear++;

      queue[rear]=p;//把非#的元素入隊(duì)

      if(rear==0)//如果是第一個(gè)元素,則作為根節(jié)點(diǎn) {

      } else {

      if(counter%2==1)//奇數(shù)時(shí)與其雙親的左子樹連接 {

      }

      if(counter%2==0)//偶數(shù)時(shí)與其雙親的右子樹連接 {

      queue[front]->rchild=p;queue[front]->lchild=p;root=p;counter++;

      }

      }

      }

      }

      front++;

      counter++;

      else//為#時(shí),計(jì)數(shù),但不連接結(jié)點(diǎn) {

      if(counter%2==0)

      front++;counter++;

      }

      ch=getchar();} return root;void preorder(TNODE *bt)//先序遍歷 {

      if(bt!=NULL){

      printf(“%c

      ”,bt->data);preorder(bt->lchild);preorder(bt->rchild);

      } } void inorder(TNODE *bt)//中序遍歷 {

      if(bt!=NULL){

      inorder(bt->lchild);printf(“%c

      ”,bt->data);inorder(bt->rchild);

      } }

      void postorder(TNODE *bt)//后序遍歷 {

      if(bt!=NULL){

      postorder(bt->lchild);postorder(bt->rchild);printf(“%c

      ”,bt->data);

      } } int main(){

      TNODE *root;

      root=creat();printf(“遞歸先序遍歷是:”);

      preorder(root);

      printf(“n”);printf(“遞歸中序遍歷是:”);inorder(root);printf(“n”);

      } printf(“遞歸后序遍歷是:”);postorder(root);printf(“n”);return 0;

      四、程序運(yùn)行結(jié)果:

      五、程序設(shè)計(jì)指導(dǎo):

      1.創(chuàng)建二叉樹的算法:首先對一般的二叉樹,添加若干個(gè)虛結(jié)點(diǎn)使其成為完全二叉樹,然后依次輸入結(jié)點(diǎn)信息,若輸入的結(jié)點(diǎn)不是虛結(jié)點(diǎn),則建立一個(gè)新結(jié)點(diǎn),若是第一個(gè),則令其為根結(jié)點(diǎn),否則將新結(jié)點(diǎn)鏈接至它的雙親結(jié)點(diǎn)上。如此重復(fù)下去,直至遇到輸入結(jié)束符(自定)為止。為了使新結(jié)點(diǎn)能夠與雙親結(jié)點(diǎn)正確相連,并考慮到這種方法中先建立的結(jié)點(diǎn)其孩子結(jié)點(diǎn)也一定先建立的特點(diǎn),可以設(shè)置一個(gè)指針類型的數(shù)組構(gòu)成的隊(duì)列來保存已輸入結(jié)點(diǎn)的地址,并使隊(duì)尾(rear)指向當(dāng)前輸入的結(jié)點(diǎn),隊(duì)頭(front)指向這個(gè)結(jié)點(diǎn)的雙親結(jié)點(diǎn)的前一個(gè)位置。由于根結(jié)點(diǎn)的地址放在隊(duì)列的第一個(gè)單元里,所以當(dāng)rear為奇數(shù)時(shí),則rear所指的結(jié)點(diǎn)應(yīng)作為左孩子與其雙親鏈接,否則rear所指的結(jié)點(diǎn)應(yīng)作為右孩子與其雙親鏈接。若雙親結(jié)點(diǎn)或孩子結(jié)點(diǎn)為虛結(jié)點(diǎn),則無須鏈接。若一個(gè)雙親結(jié)點(diǎn)與兩個(gè)孩子鏈接完畢,則進(jìn)行出隊(duì)操作,使隊(duì)頭指針指向下一個(gè)待鏈接的雙親結(jié)點(diǎn)。

      2.void preorder(TNODE *bt)函數(shù):利用遞歸的思想,不斷嵌套循環(huán),讀取結(jié)點(diǎn)元素,在每個(gè)循環(huán)中每次先讀取,再進(jìn)行進(jìn)入下一個(gè)遞歸循環(huán)中。

      3.void inorder(TNODE *bt)函數(shù) :利用遞歸的思想,不斷嵌套循環(huán),讀取結(jié)點(diǎn)元素,在每個(gè)循環(huán)中每次先左子樹,再讀取結(jié)點(diǎn)元素,再進(jìn)行進(jìn)入下一個(gè)遞歸循環(huán)中。

      4.void postorder(TNODE *bt)函數(shù):利用遞歸的思想,不斷嵌套循環(huán),讀取結(jié)點(diǎn)元素,在每個(gè)循環(huán)中每次先分別進(jìn)入左右子樹,再進(jìn)行讀取,再進(jìn)行進(jìn)入下一個(gè)遞歸循環(huán)中。

      六、心得體會:

      本次數(shù)據(jù)結(jié)構(gòu)程序設(shè)計(jì)對我有一定的幫助。通過這次的實(shí)踐,使我對數(shù)據(jù)結(jié)構(gòu)這門課程有了更深入地了解。在寫程序的過程中,我重復(fù)地讀課本上的知識,并且漸漸領(lǐng)悟到數(shù)據(jù)結(jié)構(gòu)編程的方法。在編程中,雖然遇到了一些困難,但我并不氣餒。當(dāng)程序運(yùn)行出來時(shí),我感到了快樂??傊?,通過自己地探索和努力,思維得到了鍛煉,編程能力也有了較大地改善。

      第五篇:數(shù)據(jù)結(jié)構(gòu)二叉樹操作驗(yàn)證實(shí)驗(yàn)報(bào)告

      班級:計(jì)算機(jī)11-2 學(xué)號:40 姓名:朱報(bào)龍

      成績:_________

      實(shí)驗(yàn)七 二叉樹操作驗(yàn)證

      一、實(shí)驗(yàn)?zāi)康?/p>

      ⑴ 掌握二叉樹的邏輯結(jié)構(gòu);

      ⑵ 掌握二叉樹的二叉鏈表存儲結(jié)構(gòu);

      ⑶ 掌握基于二叉鏈表存儲的二叉樹的遍歷操作的實(shí)現(xiàn)。

      二、實(shí)驗(yàn)內(nèi)容

      ⑴ 建立一棵含有n個(gè)結(jié)點(diǎn)的二叉樹,采用二叉鏈表存儲;

      ⑵ 前序(或中序、后序)遍歷該二叉樹。

      三、設(shè)計(jì)與編碼

      #include using namespace std;template class BTree;template //***********************二叉樹結(jié)點(diǎn)類定義********************** class BTreeNode { friend class BTree ;T data;BTreeNode *lchild,*rchild;public: BTreeNode():lchild(NULL),rchild(NULL){} BTreeNode(T d,BTreeNode *r=NULL):data(d),lchild(l),rchild(r){}

      *l=NULL,BTreeNode T getdata(){return data;} BTreeNode * getleft(){return lchild;} BTreeNode * getright(){return rchild;} };//***********************END******************************** //***********************二叉樹模板類定義******************* template class BTree { public: BTree(T a[],int n);void preorder(void visit(BTreeNode *p));static void preorder(BTreeNode * p,void visit(BTreeNode *p));//遞歸前序遍歷

      void inorder(void visit(BTreeNode *p));static void inorder(BTreeNode * p,void visit(BTreeNode *p));//遞歸中序遍歷

      void postorder(void visit(BTreeNode *p));static void postorder(BTreeNode * p,void visit(BTreeNode * p));//遞歸后序遍歷

      static void fun(BTreeNode *p){cout <

      data;}//訪問結(jié)點(diǎn) protected: BTreeNode * root;private: T* a;int n;BTreeNode * build0(int i);};

      //***********************建樹******************************* template BTreeNode * BTree ::build0(int i)//遞歸建樹 { BTreeNode *p;int l,r;if((i <=n)&&(a[i-1]!=' ')){ p=new BTreeNode ;p->data=a[i-1];l=2*i;r=2*i+1;p->lchild=build0(l);p->rchild=build0(r);return(p);} else return(NULL);}

      template BTree ::BTree(T a[],int n){ this->a=a;this->n=n;root=build0(1);cout <<“遞歸建樹成功!”<

      //***********************遍歷******************************* template void BTree ::preorder(void visit(BTreeNode *p))//遞歸前序遍歷 { preorder(root,visit);cout < void BTree ::preorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ visit(p);preorder(p->lchild,visit);preorder(p->rchild,visit);} } template void BTree ::inorder(void visit(BTreeNode *p)){ inorder(root,visit);cout < void BTree ::inorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ inorder(p->lchild,visit);visit(p);inorder(p->rchild,visit);} } template void BTree ::postorder(void visit(BTreeNode *p))//遞歸后序遍歷 { postorder(root,visit);cout < void BTree ::postorder(BTreeNode * p,void visit(BTreeNode *p)){ if(p!=NULL){ postorder(p->lchild,visit);postorder(p->rchild,visit);visit(p);} } void main(){ char *str=“abcd e”;cout<s(str,6);cout <>choice;cout <

      {cout <<“遞歸先序遍歷二叉樹:”;s.preorder(s.fun);cout <

      答:經(jīng)常忘記對頭結(jié)點(diǎn)的定義,以至于程序出錯(cuò),經(jīng)定義頭結(jié)點(diǎn),使程序正常運(yùn)行。

      b)程序運(yùn)行的結(jié)果如何?

      四、實(shí)驗(yàn)小結(jié) 多練習(xí),多上機(jī),耐心調(diào)試程序,找出錯(cuò)誤,多總結(jié)。

      下載數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹[五篇范文]word格式文檔
      下載數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告——中序遍歷二叉樹[五篇范文].doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        第四次實(shí)驗(yàn)--二叉樹遍歷

        一、 二叉鏈表的聲明 .BinaryNode public class BinaryNode //二叉樹的二叉鏈表結(jié)點(diǎn)類,泛型T指//定結(jié)點(diǎn)的元素類型 { public T data; //數(shù)據(jù)域,存儲數(shù)據(jù)元素 public BinaryNod......

        二叉樹的遍歷學(xué)習(xí)心得

        二叉樹的非遞歸遍歷學(xué)習(xí)心得 對于學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的新手來說,二叉樹應(yīng)該是遇到的一個(gè)比較大的難題。對于二叉樹的遍歷,如果使用遞歸的方法,代碼非常簡單,但是有些程序語言不支持遞......

        層序遍歷二叉樹(隊(duì)列),已調(diào)試,C語言

        #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; typedef char TElemType; typedef struct......

        實(shí)驗(yàn)報(bào)告:二叉樹

        實(shí)驗(yàn)報(bào)告 二叉樹 一 實(shí)驗(yàn)?zāi)康?1、進(jìn)一步掌握指針變量,動態(tài)變量的含義; 2、掌握二叉樹的結(jié)構(gòu)特性以及各種存儲結(jié)構(gòu)的特點(diǎn)及適用范圍。 3、掌握用指針類型描述、訪問和處理二叉......

        數(shù)據(jù)結(jié)構(gòu)作業(yè)——二叉樹

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告二 題目: 用先序遞歸過程監(jiān)理二叉樹(存儲結(jié)構(gòu):二叉鏈表) 輸入數(shù)據(jù)按先序遍歷輸入,當(dāng)某節(jié)點(diǎn)左子樹或者右子樹為空時(shí),輸入‘*’號,如輸入abc**d**e**時(shí),得到的二叉樹......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        注意:實(shí)驗(yàn)結(jié)束后提交一份實(shí)驗(yàn)報(bào)告電子文檔 電子文檔命名為“學(xué)號+姓名”,如:E01214058宋思怡 《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)報(bào)告(一) 學(xué)號:姓名:專業(yè)年級: 實(shí)驗(yàn)名稱:線性表 實(shí)驗(yàn)日期:2014年4月14日......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        南京信息工程大學(xué)實(shí)驗(yàn)(實(shí)習(xí))報(bào)告 實(shí)驗(yàn)(實(shí)習(xí))名稱數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)(實(shí)習(xí))日期 2011-11-2得分指導(dǎo)教師周素萍 系公共管理系專業(yè)信息管理與信息系統(tǒng)年級10級班次1姓名常玲學(xué)號20102307003......

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告

        數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告 一. 題目要求 1)編程實(shí)現(xiàn)二叉排序樹,包括生成、插入,刪除; 2)對二叉排序樹進(jìn)行先根、中根、和后根非遞歸遍歷; 3)每次對樹的修改操作和遍歷操作的顯示結(jié)果都需要在......