




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、-. z.4 實驗一基于二叉鏈表的二叉樹的實現(xiàn)4.1 問題描述基于二叉鏈表和隊列及其堆棧存儲構(gòu)造,實現(xiàn)二叉鏈表的二叉樹的對數(shù)據(jù)進展各種必要的操作。4.2 系統(tǒng)設(shè)計1.2.1提供20個功能,分別是:1.2.2二叉鏈表的構(gòu)造試一堆棧和隊列的形式進展儲存的分別是:1.2.3在程序中所定義的數(shù)據(jù)構(gòu)造有:2.3 系統(tǒng)實現(xiàn)1.3.1InitTree功能初始二叉鏈表,傳入的是頭結(jié)點地址。申請一個存儲空間,并用頭結(jié)點中的首結(jié)點指針指向該空間首地址,相應(yīng)的 時間復(fù)雜度為1。具體實現(xiàn)如下:1.3.2DestroyTree功能銷毀頭結(jié)點中首結(jié)點址針指向的線性存儲空間,傳入的是頭結(jié)點地址。具體實現(xiàn)如下:1.3.3Cr
2、eateBiTree功能與DestroyBiTree類似但是又有不同,ClearBiTree并不銷毀物理空間,而是修改邏輯關(guān)系值:1.3.4ClearBiTree功能與DestroyBiTree類似但是又有不同,ClearBiTree并不銷毀物理空間,而是修改邏輯關(guān)系值1.3.5BiTreeEmpty功能判空功能,判斷表是否為空表。時間復(fù)雜度為1,因為只需判斷一次就可以知道是否為空。實現(xiàn)如下:1.3.6BiTreeDepth功能求二叉鏈表深度的功能,由于創(chuàng)立過程中已經(jīng)把表長信息包含在頭結(jié)點中,所以直接調(diào)用并顯示即可1.3.7Root(BiTree T)功能獲取二叉鏈表的根節(jié)點的元素,通過遍歷二
3、叉鏈表中的元素,來逐個判斷,時間復(fù)雜度為n。1.3.8Value(BiTree T,TElemType e)功能求指定元素的前一個元素的容,傳入頭結(jié)點值、包含指定元素信息的一個臨時表結(jié)點值、存儲前一個元素的表結(jié)點地址。主要思路是遞歸算法。時間復(fù)雜度為O(n)。具體實現(xiàn)如下:1.3.9Assign功能求指定元素的后一個元素的容,傳入頭結(jié)點值、包含指定元素信息的一個臨時表結(jié)點值、存儲前一個元素的表結(jié)點地址。找到后,把新的數(shù)據(jù)值賦給所找到的節(jié)點。時間復(fù)雜度為O(n)。具體實現(xiàn)如下:1.3.10Parent功能找雙親節(jié)點,找到后輸出1.3.11LeftChild功能查找左孩子,利用遞歸的算法,與遍歷的
4、時間復(fù)雜度為一樣O(n)1.3.12RightChild功能查找右孩子,利用遞歸的算法,與遍歷的時間復(fù)雜度為一樣O(n)1.3.13LeftSibling功能查找節(jié)點的左邊的堂兄弟的,找到后輸出該節(jié)點的數(shù)據(jù)1.3.14RightSibling功能查找節(jié)點的右邊的堂兄弟的,找到后輸出該節(jié)點的數(shù)據(jù)函數(shù)在二叉鏈表中插入新的節(jié)點1.3.15DeleteChild功能刪除指定編號的數(shù)據(jù)元素,傳入頭結(jié)點地址、編號i、表結(jié)點類型構(gòu)造體地址來返回被刪除元素容。執(zhí)行前先判斷傳入的編號是否在可尋找圍。執(zhí)行刪除操作之后,進展移位運算。時間復(fù)雜度仍為O(n)。如下:1.3.16PreOrderTraverse功能前序
5、遍歷二叉鏈表中的數(shù)據(jù),采用先遍歷左孩子,再訪問根節(jié)點,后訪問右孩子的思想來實現(xiàn)前序遍歷的算法的。1.3.17InOrderTraverse功能中序遍歷的函數(shù),對二叉鏈表的數(shù)據(jù)進展訪問,并且利用PreOrderTraverse函數(shù)1.3.18PostOrderTraverse功能采用后續(xù)遍歷的思想,利用先序遍歷的函數(shù)進展1.3.19LevelOrderTraverse功能完全遍歷二叉鏈表中的數(shù)據(jù),并進展輸出的1.3.20Point功能定位節(jié)點的函數(shù),在需要查找二叉鏈表二叉樹的節(jié)點的時候,可以直接調(diào)用該函數(shù),進展處理,相應(yīng)的代碼如下1.3.21FILE * fileOpen功能讀取功能,通過fsc
6、anf實現(xiàn)格式化讀取,同時結(jié)合CreateList函數(shù)實現(xiàn)順序1.3.22BiTNode * Create(FILE *fp)功能把二叉鏈表二叉樹的數(shù)據(jù)寫入到文件中去1.4效率分析在上面介紹各功能時已經(jīng)提到時間復(fù)雜度的計算了,這里再簡單分析一下。具有同數(shù)量級復(fù)雜度的功能在實現(xiàn)方法上一般近似。比方InOrderTraverse,PostOrderTraverse,BiTreeDepth,LevelOrderTraverse它們都是基于PreOrderTraverse來設(shè)計的,所以效率都是O(n);而Root,Value,Assign,Parent,LeftChild,RightChild,Lef
7、tSiblingRightSibling,InsertChild,DeleteChild是基于VisitPoint,平均效率為O(n); InitTree DestroyBiTree所需信息,所以效率為O(1);CreateBiTreeClearBiTreeBiTreeEmpty都要對二叉鏈表,平均效率為O(n)。實驗總結(jié)與評價我做了這個實驗發(fā)現(xiàn)自己的編程能力很不好,自己的腦袋中有相應(yīng)的想法和主意,但是因為自己的編程能力很不好也就實現(xiàn)不了自己的想法。 二叉鏈表的二叉樹的時候,實現(xiàn)二叉鏈表線性的對我來說還可以實現(xiàn),因為線性的所用到方法和技術(shù),在學(xué)習(xí)十字鏈表的時候練習(xí)的比擬少,實現(xiàn)起來難度是很大。
8、特別是有了教師給的框架以后,我們要做的任務(wù)就是向里面填我們自己寫的函數(shù),在填寫的過程中,我深深的感受到了,認真的重要性,因為我在寫好調(diào)試的中發(fā)現(xiàn)了很多,因為自己的不小心和在敲代碼的過程中的不認真而造成的很不應(yīng)該的錯誤,這些錯誤也給自己在調(diào)試的過程中也造成了很大的麻煩,因為是不認真而犯的錯誤,因此調(diào)試的過程中也很不好發(fā)現(xiàn)。對我來說,因為我的C語言的功底很不好,運用指針和鏈表的能力還沒有能到達運用自如,理解深刻的地步,所以在順序鏈表的鏈表的實現(xiàn)中,對我來說是一個很大的挑戰(zhàn),我有很多不會的地方通過自己看書,問室友和上網(wǎng)查詢,一點一點的寫了出來,肯定現(xiàn)在還是會有很多的問題,但是這也是我一直在努力把它做
9、的更好,在調(diào)試的中出現(xiàn)了很多的BUG,自己一個個的慢慢的消除掉了,做出了,現(xiàn)在的程序。 如果問自己的體會,那一定是希望我自己以后多多的動手,把以前C語言的書好好再復(fù)習(xí)一遍,還有就是把現(xiàn)在正在學(xué)習(xí)的數(shù)據(jù)構(gòu)造的書上各個程序,自己要一個個的敲一遍,練習(xí)一下自己的熟悉程度。總的來說,我對這次的實驗是很有感觸的。因為,這次實驗讓我認識到了,自己的編程能力的低下,如果自己再不下一下功夫的話,則數(shù)據(jù)構(gòu)造的考試自己就十分的危險了。因此,我要加緊復(fù)習(xí)C語言的知識和數(shù)據(jù)構(gòu)造學(xué)過的容,爭取自己能在接下來的學(xué)習(xí)中能有些進步。附錄:參考書數(shù)據(jù)構(gòu)造C語言版嚴蔚敏 吳偉民編著 C語言程序設(shè)計 計昌,開編著實驗心得體會對于這
10、兩次的實驗,我自己的體會是很深刻的,也是記憶深刻的。因為,正是因為這兩次的實驗深深地讓我認識到了自己的水平是多么的低下,以前,自己還有點夜郎自大的認為,自己對所學(xué)的東西,自己掌握的還差不多了呢。但是,經(jīng)過這次的實驗,我真的是清楚的發(fā)現(xiàn)自己對所學(xué)的知識的掌握還差的很多,自己還有很多的功課要補。第一,以前無論是學(xué)習(xí)C語言還是數(shù)據(jù)構(gòu)造,我的方法是拿著書本看,還有就是拿著練習(xí)本寫一寫,而自己家上機的實踐的時間是非常少的,因為我感覺上機得到的構(gòu)造一定會和自己想的和寫的一樣呢,顯然,我是錯誤的,因為在這次的實驗里我就發(fā)現(xiàn),即使是書上一模一樣的代碼,在機子上也是有很大 的可能出錯的,更不用說是自己寫的了,在
11、寫線性表,線性鏈表和二叉鏈表的時候,我出現(xiàn)了用書上的代碼不能用的情況,而且是非常嚴重的錯誤。有些聲明和指針的問題會出現(xiàn)很大的不同。我的體會是,從現(xiàn)在起,重視上機的過程,多書上的程序一定要在機子上跑一下,然后再分析一下,出現(xiàn)這種結(jié)果的原因和整個程序的流程。第二,就是實驗的 時候的規(guī)的問題,由于,自己寫代碼沒有很好的習(xí)慣和規(guī)則,于是,在自己寫好的程序出現(xiàn)錯誤后自己不能夠很快的 找到出現(xiàn)錯誤的位置,比方,對全局變量聲明的時候,全局變量的位置問題,在構(gòu)造和聯(lián)合聲明指針的時候,指針的形式和指針的命名的形式問題,這些錯誤都有在自己的實驗的過程中出現(xiàn),而且,也給自己帶來了很大的麻煩。我的體會是,以后再寫程序
12、的時候一定遵守一定的規(guī)則和習(xí)慣,例如關(guān)鍵詞的命名習(xí)慣,指針的使用形式和構(gòu)造聯(lián)合中的一些形式的問題,應(yīng)該遵循一定的規(guī)則和習(xí)慣,因為,只有這樣的自己在寫好的調(diào)試和檢查的過程中才不會走則多 的彎路,才會把做事的速度提高上去。 最后,就是自己的一些心得體會對這次的實驗。做什么事情都要認真對待,無論事情的大小,因為只有這樣自己才會養(yǎng)成認真做事的習(xí)慣,這次的數(shù)據(jù)構(gòu)造的實驗讓我深深的意識到了這一點。附錄:實驗三代碼:#include #include #include #include#include #define LIST_INIT_SIZE 100#define LISTINCREMENT 10#de
13、fine TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASTABLE -1#define OVERFLOW -2#define MA*_TREE_SIZE 100typedef int Status;typedef int TElemType; /數(shù)據(jù)元素類型定義,注意這里是整型的,可以使chartypedef TElemType SqBiTreeMA*_TREE_SIZE;SqBiTree bt;typedef structTElemType *base;TElemType *top;int stacksize;Sq
14、Stack;Status InitStack(SqStack*S);Status Pop(SqStack*S,TElemType e);Status Push(SqStack*S,TElemType e);Status StackEmpty(SqStack*S);/全局變量的聲明char *m_pCharBuf = NULL;int m_nList100;int m_nCount = 0;char* openFileOnlyRead(char * fileName);void writeQuickSortResult(char *pResult);char* openFileOnlyRead(
15、char * fileName) int nLen = 0; FILE *pFile = fopen(fileName, r); /翻開文件 fseek(pFile, 0, SEEK_END); /文件指針移到文件尾 nLen = ftell(pFile); /得到當前指針位置, 即是文件的長度 rewind(pFile); /文件指針恢復(fù)到文件頭位置 /動態(tài)申請空間, 為保存字符串結(jié)尾標志0, 多申請一個字符的空間 m_pCharBuf = (char*)malloc(sizeof(char)* nLen + 1); if (!m_pCharBuf) perror(存不夠!n); e*it(
16、0); /讀取文件容/讀取的長度和源文件長度有可能有出入,這里自動調(diào)整 nLen nLen = fread(m_pCharBuf, sizeof(char), nLen, pFile); m_pCharBufnLen = 0; /添加字符串結(jié)尾標志 /printf(%sn, pchBuf); /把讀取的容輸出到屏幕 fclose(pFile); /關(guān)閉文件 /free(pchBuf); /釋放空間 return m_pCharBuf;/寫入排序完成后的結(jié)果void writeQuickSortResult(char *pResult) FILE *pFile = fopen(QuickSort
17、Result.t*t, w); /翻開文件 fputs(pResult, pFile); /寫入數(shù)據(jù) fclose(pFile); /關(guān)閉文件typedef struct BiTNodeTElemType data;struct BiTNode *lchild,*rchild;BiTNode,*BiTree;typedef BiTree QElemType;typedef struct QNode QElemType data; struct QNode *ne*t;QNode,*QueuePtr;typedef struct LinkQueue QueuePtr front,rear;Lin
18、kQueue;void InitTree(BiTree*T);void DestroyBiTree(BiTree *T);void CreateBiTree(BiTree *T);Status ClearBiTree(BiTree T);Status BiTreeEmpty(BiTree T);Status BiTreeDepth(BiTree T);Status Root(BiTree T);Status Value(BiTree T,TElemType e);Status Assign(BiTree T,TElemType e,int value);Status Parent(BiTree
19、 T,TElemType e);Status LeftChild(BiTree T,TElemType e);Status RightChild(BiTree T,TElemType e);Status LeftSibling(BiTree T,TElemType e);Status RightSibling(BiTree T,TElemType e);Status InsertChild(BiTree T,int LR,BiTree C);Status DeleteChild(BiTree T,int LR);Status PreOrderTraverse(BiTree T,Status(*
20、Visit)(TElemType e);Status InOrderTraverse(BiTree T,Status(*Visit)(TElemType e);Status PostOrderTraverse(BiTree T,Status(*Visit)(TElemType e);Status LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e);Status Visit(TElemType e);BiTree Point(BiTree T,TElemType s); /返回二叉樹中指向元素值為s的結(jié)點的指針void InitQueu
21、e(LinkQueue Q);/構(gòu)造一個空隊列Status QueueEmpty(LinkQueue Q);/判斷隊列是否為空void EnQueue(LinkQueue Q,QElemType e);/插入元素為新的隊尾元素Status DeQueue(LinkQueue Q,QElemType e);/刪除隊頭元素BiTNode * Create(FILE *fp);FILE * fileOpen();void main(void) int i; /文件容讀取出來 char *pTe*t = openFileOnlyRead(resource.t*t); printf(%snn, pTe*
22、t); BiTree T; FILE *p; TElemType e; int n; int value; int op=1; while(op)system(cls); printf(nn);printf( Menu for Linear Table On Sequence Structure n);printf(-n);printf( 1. InitTree 11. LeftChildn);printf( 2. DestroyBiTree 12. RightChildn);printf( 3. CreateBiTree 13. LeftSiblingn);printf( 4. ClearB
23、iTree 14. RightSiblingn);printf( 5. BiTreeEmpty 15. InsertChildn);printf( 6. BiTreeDepth 16. DeleteChildn);printf( 7. Root 17. PreOrderTraversen);printf( 8. Value 18. InOrderTraversen);printf( 9. Assign 19. PostOrderTraversen);printf( 10. Parent 20. LevelOrderTraversen);printf( 0. E*itn);printf(-n);
24、 printf( 請選擇你的操作020:);scanf(%d,&op); switch(op) case 1: InitTree(&T); BiTNode * Create(p); FILE * fileOpen(); if(!(T)=NULL) printf(n-二叉樹初始化成功!n);else printf(二叉樹創(chuàng)立失敗!n); getchar();getchar(); break; case 2: printf(是否要銷毀二叉樹!(1為是,0是否)n); scanf(%d,&n); if(n=1) DestroyBiTree(&T); else return 0; if(T!=NULL
25、) printf(n-二叉樹成功銷毀實現(xiàn)!n);else printf(n-DestroyList功能待實現(xiàn)); getchar();getchar(); break; case 3: /InitTree(&T); printf(Please input the char:e=n); scanf(%d,&e); CreateBiTree(T); if(T)!=NULL) printf(n-CreateBiTree功能實現(xiàn)!n); else printf(n-CreateBiTree功能待實現(xiàn)!n); getchar();getchar(); break; case 4: ClearBiTree
26、(T); if(T) printf(n-ClearBiTree功能待實現(xiàn)!n); else printf(n-ClearBiTree功能實現(xiàn)!n);0- getchar();getchar(); break; case 5: BiTreeEmpty(T); if(T) printf(n-BiTreeEmpty功能實現(xiàn)!n); else printf(n-BiTreeEmpty功能待實現(xiàn)!n); getchar();getchar(); break; case 6: BiTreeDepth(T); if(T) printf(n-BiTreeDepth功能實現(xiàn)!n); else printf(n-
27、BiTreeDepth功能待實現(xiàn)!n); getchar();getchar(); break; case 7: Root(T); if(T) printf(n-Root功能實現(xiàn)!n); else printf(n-Root功能待實現(xiàn)!n); getchar();getchar(); break; case 8: printf(Please input the node of you want:e=n); scanf(%c,&e); Value(T,e); if(T=NULL) printf(n-Value功能實現(xiàn)!n); else printf(n-Value功能待實現(xiàn)!n); getcha
28、r();getchar(); break; case 9: printf(Please input the node and number of you want:e=nvalue=n); scanf(%c%d,&e,&value); Assign(T,e,value); if(T=NULL) printf(n-Assign功能實現(xiàn)!n); else printf(n-Assign功能待實現(xiàn)!n); getchar();getchar(); break; case 10: printf(Please input the node of you want:e=n); scanf(%c,&e);
29、Parent(T,e); if(T=NULL) printf(n-Parent功能實現(xiàn)!n); elseprintf(n-Parent功能待實現(xiàn)!n); getchar();getchar(); break; case 11: printf(Please input the node of you want:e=n); scanf(%c,&e); LeftChild(T,e); if(T!=NULL) printf(n-LeftChild功能實現(xiàn)!n); else printf(n-LeftChild功能待實現(xiàn)n); getchar();getchar(); break; case 12: p
30、rintf(Please input the node of you want:e=n); scanf(%c,&e); RightChild(T,e); if(T!=NULL) printf(n-RightChild功能實現(xiàn)n); else printf(n-RightChild功能待實現(xiàn)!n); getchar();getchar(); break; case 13: printf(Please input the node of you want:e=n); scanf(%c,&e); LeftSibling(T,e); if(T!=NULL) printf(n-LeftSibling功能
31、實現(xiàn)!n); else printf(n-LeftSibling功能待實現(xiàn)n); getchar();getchar(); break; case 14: printf(Please input the node of you want:e=n); scanf(%c,&e); RightSibling(T,e); if(T!=NULL) printf(n-LeftSibling功能實現(xiàn)!n); else printf(n-LeftSibling功能待實現(xiàn)!n); getchar();getchar(); break; case 15: /printf(Please input the node
32、 of you want:p,e,LR and C=n); / scanf(%c,&e); / InsertChild(T,P,LR,C); printf(線性表是空表!n); getchar();getchar(); break; case 16: printf(線性表是空表!n); getchar();getchar(); break; case 17: printf(線性表是空表!n); getchar();getchar(); break; case 18: printf(線性表是空表!n); getchar();getchar(); break; case 19: printf(Pl
33、ease input the node of you want:e=n); scanf(%c,&e); PostOrderTraverse(T,e); if(T!=NULL) printf(功能實現(xiàn)了!n);elseprintf(功能待實現(xiàn)了!n); getchar();getchar(); break; case 20: printf(線性表是空表!n); getchar();getchar(); break; case 0: break;/end of switch /end of while char result1000 = QuickSortResult: ; for(i = 0;
34、i data=NULL;return OK; void DestroyBiTree(BiTree *T) if(T!=NULL) DestroyBiTree(*T)-lchild); DestroyBiTree(*T)-rchild); free(T); T=NULL; return OK; void CreateBiTree(BiTree *T) /* 算法6.4:按先序次序輸入二叉樹中結(jié)點的值可為字符型或整型,在主程中 */ /* 定義,構(gòu)造二叉鏈表表示的二叉樹T。變量Nil表示空子樹。有改動 */ TElemType ch; #ifdef CHAR scanf(%c,&ch); #end
35、if #ifdef INT scanf(%d,&ch); #endif if(ch= ) /* 空 */ *T=NULL; else *T=(BiTree)malloc(sizeof(BiTNode); if(!*T) e*it(OVERFLOW); (*T)-data=ch; /* 生成根結(jié)點 */ CreateBiTree(&(*T)-lchild); /* 構(gòu)造左子樹 */ CreateBiTree(&(*T)-rchild); /* 構(gòu)造右子樹 */ Status ClearBiTree(BiTree T) BiTree pl,pr; if(T=NULL) return ; if(T)
36、 pl=T-lchild; pr=T-rchild; T-lchild=NULL; T-rchild=NULL; free(T); T=NULL; ClearBiTree(pl); ClearBiTree(pr); return OK;Status BiTreeEmpty(BiTree T) if(T=NULL) return TRUE; else return FALSE;Status BiTreeDepth(BiTree T) int lchildHigh,rchildHigh; if(T=NULL)return 0; else lchildHigh=BiTreeDepth(T-lchil
37、d); rchildHigh=BiTreeDepth(T-rchild); return lchildHighrchildHigh (lchildHigh+1):(rchildHigh+1);Status Root(BiTree T) if(T=NULL)return ERROR; printf(%c,T-data); Root(T-lchild); Root(T-rchild); return OK;Status Value(BiTree T,TElemType e) if(T=NULL)return ERROR; else if(T-data=e)return (T-data); Valu
38、e(T-lchild,e); Value(T-rchild,e); return OK; Status Assign(BiTree T,TElemType e,int value) if(T=NULL)return ERROR; if(T-data=e) T-data=value; else Assign(T-lchild,e,value); Assign(T-rchild,e,value); return OK;Status Parent(BiTree T,TElemType e) if(T=NULL)return ERROR; if(T-data=e) if(T-lchild | T-rc
39、hild) return (T-data); else Parent(T-lchild,e); Parent(T-rchild,e); return OK;Status LeftChild(BiTree T,TElemType e) if(T=NULL) return; if(T-data=e) if(!(T-lchild) printf(%c,T-lchild); else return NULL; else T-lchild; LeftChild(T-lchild,e); T-rchild; LeftChild(T-rchild,e); return OK;Status RightChil
40、d(BiTree T,TElemType e)if(T=NULL) return; if(T-data=e) if(!(T-rchild) printf(%c,T-rchild); else return NULL; else T-lchild; RightChild(T-lchild,e); T-rchild; RightChild(T-rchild,e); return OK;Status LeftSibling(BiTree T,TElemType e) /返回左兄弟 TElemType a; BiTree p; if(T) a=Parent(T,e);/a為e的雙親 if(a!=NUL
41、L) p=Point(T,a);/p指向結(jié)點a的指針 if(p-lchild&p-rchild&p-rchild-data=e)/p存在左右孩子而且右孩子是e return p-lchild-data; return NULL;Status RightSibling(BiTree T,TElemType e)TElemType a; BiTree p; if(T) a=Parent(T,e);/a為e的雙親 if(a!=NULL) p=Point(T,a);/p為指向結(jié)點的a的指針 if(p-lchild&p-rchild&p-lchild-data=e) return p-lchild-da
42、ta; return NULL;Status InsertChild(BiTree T,int LR,BiTree C) if(T) if(LR=0) C-rchild=T-lchild; T-lchild=C; else C-rchild=T-rchild;/T指結(jié)點的原有右子樹成為C的右子樹 T-rchild=C; return OK; return ERROR;Status DeleteChild(BiTree T,int LR) if(T) if(LR=0)DestroyBiTree(T-lchild);else DestroyBiTree(T-rchild);return OK;re
43、turn ERROR;Status PreOrderTraverse(BiTree T,Status(*Visit)(TElemType e) Status PrintElement(TElemType e) printf(e); return OK; if(T) if(Visit(T-data) if(PreOrderTraverse(T-lchild,Visit) if(PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /PreOrderTraaverseStatus InOrderTrave
44、rse(BiTree T,Status(*Visit)(TElemType e) Status PrintElement(TElemType e) printf(e); return OK; if(T) if(PreOrderTraverse(T-lchild,Visit) if(Vist(T-data); if(PreOrderTraverse(T-rchild,Visit) return OK; return ERROR; else return OK; /InOrderTraverseStatus PostOrderTraverse(BiTree T,Status(*Visit)(TEl
45、emType e) Status PrintElement(TElemType e) printf(e); return OK; if(T) if(PreOrderTraverse(T-lchild,Visit) if(PreOrderTraverse(T-rchild,Visit) if(Vist(T-data) return OK; return ERROR; else return OK; /PostOrderTraverseStatus LevelOrderTraverse(BiTree T,Status(*Visit)(TElemType e) BiTree p,newNode; S
46、tatus PrintElement(TElemType e) printf(e); return OK; if(T) if(p=T-lchild) newNode=(BiTree)malloc(sizeof(BiTNode); newNode-data=e; newNode-rchild=NULL; newNode-lchild=p; T-lchild=newNode; else return ERROR; else return ERROR; return OK;/LevelOrderTraverse/Status Visit(TElemType e)/ printf(%c,e);/BiT
47、ree Point(BiTree T,TElemType s)/返回二叉樹T中指向元素值為S的結(jié)點指針 LinkQueue q; QElemType a; if(T) InitQueue(q);/初始化隊列 EnQueue(q,T);/根指針入隊 while(!QueueEmpty(q)/隊不空 DeQueue(q,a);/出隊,隊列元素賦給e if(a-data=s)/a所指結(jié)點為的值為s return a; if(a-lchild)/有左孩子 EnQueue(q,a-lchild);/入隊左孩子 if(a-rchild)/有右孩子 EnQueue(q,a-rchild);/入隊右孩子 return NULL;void I
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2030年中國便攜式粗糙度測量儀行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國交直流埋弧焊機行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國中負荷純油切削液行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國不銹鋼臥式板框過濾器行業(yè)投資前景及策略咨詢報告
- 2025至2030年中國七號信令集中檢測維護系統(tǒng)行業(yè)投資前景及策略咨詢報告
- 【龍巖】2025年福建龍巖市新羅區(qū)事業(yè)單位招聘衛(wèi)生專業(yè)技術(shù)人員28人筆試歷年典型考題及考點剖析附帶答案詳解
- 教育行業(yè)職業(yè)培訓(xùn)需求表
- 公司舉行端午儀式活動方案
- 公司元旦節(jié)征文活動方案
- 公司公眾號投票活動方案
- 2024年寧夏中衛(wèi)沙坡頭區(qū)招聘社區(qū)專職工作者真題
- 2025年江蘇省南京市中考物理模擬練習(xí)卷(含答案)
- 人教部編版三年級下冊語文各單元【習(xí)作范文】
- 咨詢公司項目管理制度
- 教師普法考試題及答案
- 水冷空調(diào)項目可行性研究報告
- 自動化控制技術(shù)試題及答案
- 農(nóng)村三資管理
- 【初中地理】七年級地理下冊全冊期末總復(fù)習(xí)(課件)-2024-2025學(xué)年七年級地理課件(人教版2024年)
- 2025年全國青少年禁毒知識競賽題庫附答案(共150題)
- MOOC 油氣田應(yīng)用化學(xué)-西南石油大學(xué) 中國大學(xué)慕課答案
評論
0/150
提交評論