實驗13-full - 二叉樹非遞歸遍歷_第1頁
實驗13-full - 二叉樹非遞歸遍歷_第2頁
實驗13-full - 二叉樹非遞歸遍歷_第3頁
實驗13-full - 二叉樹非遞歸遍歷_第4頁
實驗13-full - 二叉樹非遞歸遍歷_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

付費下載

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

實用文檔實驗十三二叉樹非遞歸遍歷1.創(chuàng)建一個包含數(shù)字元素的完全二叉樹,使用switch函數(shù),根據(jù)用戶的輸入,同時具有如下功能:【1】初始化一個二叉樹提示:scanf("%d%d",&i,&x);//i是按滿二叉樹編號,節(jié)點應(yīng)有的序號,x是節(jié)點的數(shù)據(jù)先建立一個新節(jié)點,再利用性質(zhì)5,建立新節(jié)點與其雙親的左/右孩子的關(guān)系?!?】前序非遞歸遍歷,打印出各節(jié)點的數(shù)據(jù)【3】中序非遞歸遍歷,打印出各節(jié)點的數(shù)據(jù)【4】后序非遞歸遍歷,打印出各節(jié)點的數(shù)據(jù)【5】結(jié)束程序運行#include<stdio.h>#include<stdlib.h>structnode{ intdata; structnode*lc,*rc;};structnode*root;intm=0;main(){ intcord; structnode*creat(); voidpreorderz(structnode*t); voidinorder(structnode*t); voidpostorder(structnode*t); do { printf("\n主菜單\n"); printf("1建立二叉樹\n"); printf("2先序非遞歸遍歷\n"); printf("3中序非遞歸遍歷\n"); printf("4后序非遞歸遍歷\n"); printf("5結(jié)束程序運行\(zhòng)n"); printf("-----------------------------------\n"); printf("請輸入您的選擇(1,2,3,4,5)"); scanf("%d",&cord); switch(cord) { case1: { root=creat();//建立二叉樹 printf("建立二叉樹程序以執(zhí)行完,\n"); printf("請返回主菜單,用遍歷算法驗證程序的正確性\n"); }break; case2: { preorderz(root); }break; case3: { inorder(root); }break; case4: { postorder(root); }break; case5: { printf("二叉樹程序執(zhí)行完,再見!\n"); exit(0); } } }while(cord<=6);}structnode*creat(){ structnode*t,*q,*s[30]; inti,j,x; printf("i,x="); scanf("%d%d",&i,&x);//i是按滿二叉樹編號,節(jié)點應(yīng)有的序號,x是節(jié)點的數(shù)據(jù) while((i!=0)&&(x!=0)) { q=(structnode*)malloc(sizeof(structnode)); q->data=x; q->lc=NULL; q->rc=NULL;//建立新節(jié)點q s[i]=q; if(i==1) t=q;//t代表樹根節(jié)點 else { j=i/2;//i的雙親節(jié)點的編號 if((i%2)==0) s[j]->lc=q; else s[j]->rc=q; } printf("i,x="); scanf("%d%d",&i,&x); } return(t);}voidpreorderz(structnode*p)//前序非遞歸算法{ structnode*q,*s[30];//s輔助棧 inttop,bools; q=p;top=0;//棧頂指針 bools=1;//bools=1為真值繼續(xù)循環(huán);bools=0為假時???,結(jié)束循環(huán) do { while(q!=NULL) { printf("%6d",q->data);//訪問節(jié)點 top++; s[top]=q; q=q->lc; } if(top==0) bools=0; else { q=s[top]; top--; q=q->rc; } }while(bools); printf("\n");}voidinorder(structnode*p)//中序非遞歸遍歷{ structnode*s[30],*q; inttop,bools; q=p;top=0; bools=1; do { while(q!=NULL) { top++; s[top]=q; q=q->lc; } if(top==0) bools=0; else { q=s[top]; top--; printf("%6d",q->data);//訪問節(jié)點 q=q->rc; } }while(bools);}voidpostorder(structnode*p){ structnode*s[30],*s2[30],*q; inttop,bools; q=p;top=0; bools=1; do { while(q!=NULL) { top++; s[top]=q; s2[top]=1; q=q->lc; } if(top==0) bools=0; else { if(s2[top]==1) { s2[top]=2; q=s[t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論