2022自考數(shù)據(jù)結(jié)構(gòu)上機(jī)題目3二叉樹(shù)_第1頁(yè)
2022自考數(shù)據(jù)結(jié)構(gòu)上機(jī)題目3二叉樹(shù)_第2頁(yè)
2022自考數(shù)據(jù)結(jié)構(gòu)上機(jī)題目3二叉樹(shù)_第3頁(yè)
2022自考數(shù)據(jù)結(jié)構(gòu)上機(jī)題目3二叉樹(shù)_第4頁(yè)
2022自考數(shù)據(jù)結(jié)構(gòu)上機(jī)題目3二叉樹(shù)_第5頁(yè)
已閱讀5頁(yè),還剩10頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、/*二叉樹(shù)*/#include #include #include #define size 100typedef char DataType;typedef struct node DataType data; struct node *lchild, *rchild;/左右孩子指針BinTNode;/結(jié)點(diǎn)類(lèi)型typedef BinTNode *BinTree;/建立二叉樹(shù)void CreateBinTree(BinTree *T) char ch; if(ch=getchar()= ) printf(建立空節(jié)點(diǎn)n); *T=NULL; else *T=(BinTNode *)malloc(

2、sizeof(BinTNode); (*T)-data=ch; printf(建立節(jié)點(diǎn) %c n, ch); CreateBinTree(&(*T)-lchild); CreateBinTree(&(*T)-rchild); /在序列中查找節(jié)點(diǎn)位置int Search(char array, char c) int i=0; while(arrayi!=c & arrayi) i+; if(arrayi=c) return i; else return -1; /基于先序和中序序列旳構(gòu)造算法void CreateBinTree2(BinTree *T, char pre, char ino,

3、int ps, int is, int n) int k; if(n=0) *T=NULL; else k=Search(ino, preps); if(k=-1) puts(Errorn); else *T=(BinTNode *)malloc(sizeof(BinTNode); (*T)-data=preps; if(k=is) (*T)-lchild=NULL; else CreateBinTree2(&(*T)-lchild, pre, ino, ps+1, is, k-is); if(k=is+n-1) (*T)-rchild=NULL; else CreateBinTree2(&(

4、*T)-rchild, pre, ino, ps+1+(k-is), k+1, n-(k-is)-1); /基于中序和后序序列旳構(gòu)造算法void CreateBinTree3(BinTree *T, char ino, char post, int is, int ps, int n) int k; if(n=0) *T=NULL; else k=Search(ino, postps+n-1); if(k=-1) puts(Error!n); else *T=(BinTNode *)malloc(sizeof(BinTNode); (*T)-data=postps+n-1; if(k=is)

5、(*T)-lchild=NULL; else CreateBinTree3(&(*T)-lchild, ino, post, is, ps, k-is); if(k=is+n-1) (*T)-rchild=NULL; else CreateBinTree3(&(*T)-rchild, ino, post, k+1, ps+(k-is), n-(k-is)-1); /先序遍歷二叉樹(shù)void Preorder(BinTree T) if(T) printf(%c , T-data); Preorder(T-lchild); Preorder(T-rchild); /中序遍歷二叉樹(shù)void Inor

6、der(BinTree T) if(T) Inorder(T-lchild); printf(%c , T-data); Inorder(T-rchild); /后序遍歷二叉樹(shù)void PostOrder(BinTree T) if(T) PostOrder(T-lchild); PostOrder(T-rchild); printf(%c , T-data); /求二叉樹(shù)旳深度(高度)int GetDepth(BinTree T) int ld, rd; if(!T) return 0; else ld=GetDepth(T-lchild); rd=GetDepth(T-rchild); r

7、eturn ld rd ? ld+1 : rd+1; /求二叉樹(shù)葉子節(jié)點(diǎn)數(shù)int GetLeafCount(BinTree T) int count; if(T=NULL) count=0; else if(T-lchild=NULL) & (T-rchild=NULL) count=1; else count = GetLeafCount(T-lchild) + GetLeafCount(T-rchild); return count;/求度為1旳節(jié)點(diǎn)個(gè)數(shù)int GetOneDegreeLeaf(BinTree T) int count; if(T=NULL) count=0; else i

8、f(T-lchild=NULL) & (T-rchild!=NULL) count=1; else if(T-lchild!=NULL) & (T-rchild=NULL) count=1; else count = GetOneDegreeLeaf(T-lchild) + GetOneDegreeLeaf(T-rchild); return count;void main() int depth, leafCount, oneDegreeLeafCount; char pre20, ino20, post20; BinTree root=NULL; /puts(輸入前序序列:); /gets

9、(pre); puts(輸入中序序列:); gets(ino); puts(輸入后序序列:); gets(post); /CreateBinTree(&root); /CreateBinTree2(&root, pre, ino, 0, 0, 6); CreateBinTree3(&root, ino, post, 0, 0, 11); puts(n前序遍歷二叉樹(shù):); Preorder(root); puts(n中序遍歷二叉樹(shù):); Inorder(root); puts(n后序遍歷二叉樹(shù):); PostOrder(root); depth=GetDepth(root); printf(n二叉樹(shù)深度(高度)為:%d, depth); leafCount=GetLea

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論