創(chuàng)建一顆二叉樹_第1頁
創(chuàng)建一顆二叉樹_第2頁
創(chuàng)建一顆二叉樹_第3頁
創(chuàng)建一顆二叉樹_第4頁
創(chuàng)建一顆二叉樹_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、創(chuàng)建一顆二叉樹header.h:#ifndef BCNF_Header_h#define BCNF_Header_htypedefint Item;typedefstruct nodestructnode * lchild;structnode * rchild;Item data;BiTNode,*BiTree;/*構(gòu)造一棵新的二叉樹*/BiTree InitBiTree(BiTNode *root);/*生成節(jié)點*/BiTNode *MakeNode(Item item,BiTNode *lchild,BiTNode *rchild);/*釋放節(jié)點*/void FreeNode(BiTNo

2、de *pnode);/*清空一棵二叉樹*/void ClearBiTree(BiTree tree);/*銷毀一棵二叉樹*/void DestroyBiTree(BiTree tree);/*判定是否為空*/int IsEmpty(BiTree tree);/*返回樹的深度*/int GetDepth(BiTree tree);/*返回根*/BiTree GetRoot(BiTree tree);/*返回節(jié)點值*/Item GetItem(BiTNode *pnode);/*設(shè)置節(jié)點值*/void SetItem(BiTNode *pnode,Item item);/*設(shè)置左子樹*/BiTr

3、ee SetLChild(BiTree parent,BiTree lchild);/*設(shè)置右子樹*/BiTree SetRChild(BiTree parent,BiTree rchild);/*返回左子樹*/ BiTree GetLChild(BiTree tree);/*返回右子樹*/BiTree GetRChild(BiTree tree);/*插入新子樹*/BiTree InsertChild(BiTree parent,int lr,BiTree child);/*刪除子樹*/void DeleteChild(BiTree parent,int lr);/*先序遍歷二叉樹*/voi

4、d PreOrderTraverse(BiTree tree,void(*visit)();/*中序遍歷二叉樹*/void InOrderTraverse(BiTree tree,void(*visit)();/*后序遍歷二叉樹*/void PostOrderTraverse(BiTree tree,void(*visit)();#endifmain.c:#include #include#includeHeader.hBiTree InitBiTree(BiTNode *root)BiTree tree = root;return tree;/*生成節(jié)點*/BiTNode *MakeNode

5、(Item item,BiTNode *lchild,BiTNode *rchild) BiTNode * pnode = (BiTNode *)malloc(sizeof(BiTNode); if(pnode)pnode-data = item;pnode-lchild = lchild; pnode-rchild = rchild;return pnode;/*釋放節(jié)點*/void FreeNode(BiTNode *pnode) if(pnode!=NULL) free(pnode);/*清空一棵二叉樹*/void ClearBiTree(BiTree tree)BiTNode * pn

6、ode = tree; if(pnode-lchild!=NULL)ClearBiTree(pnode-lchild);if(pnode-rchild!=NULL)ClearBiTree(pnode-rchild);FreeNode(pnode);/*銷毀一棵二叉樹*/void DestroyBiTree(BiTree tree) if(tree)ClearBiTree(tree);/*判定是否為空*/Item IsEmpty(BiTree tree) if(tree=NULL) return0;elsereturn1;/*返回樹的深度*/int GetDepth(BiTree tree)in

7、t cd,ld,rd;cd = ld = rd =0;if(tree)ld = GetDepth(tree-lchild); rd = GetDepth(tree-rchild); cd = (ld rd ? ld : rd); return cd+1;else return0;/*返回根*/BiTree GetRoot(BiTree tree)return tree;/*返回節(jié)點值*/Item GetItem(BiTNode *pnode)return pnode-data;/*設(shè)置節(jié)點值*/void SetItem(BiTNode *pnode,Item item) pnode-data

8、= item;/*設(shè)置左子樹*/BiTree SetLChild(BiTree parent,BiTree lchild) parent-lchild = lchild; return lchild;/*設(shè)置右子樹*/BiTree SetRChild(BiTree parent,BiTree rchild) parent-rchild = rchild; return rchild;/*返回左子樹*/BiTree GetLChild(BiTree tree)if(tree)return tree-lchild; returnNULL;/*返回右子樹*/BiTree GetRChild(BiTr

9、ee tree)if(tree)return tree-rchild; returnNULL;/*插入新子樹*/BiTree InsertChild(BiTree parent,int lr,BiTree child) if(parent)if( lr = 0& parent-lchild = NULL)parent-lchild = child;return child;if( lr = 1& parent-rchild = NULL)parent-rchild = child;return child; returnNULL;/*刪除子樹*/void DeleteChild(BiTree

10、parent,int lr)if(parent)if( lr = 0& parent-lchild != NULL)parent-lchild = NULL; FreeNode(parent-lchild);if( lr = 1& parent-rchild != NULL)parent-rchild = NULL; FreeNode(parent-rchild);/*先序遍歷二叉樹*/void PreOrderTraverse(BiTree tree,void(*visit)() BiTNode * pnode = tree;if(pnode) visit(pnode-data);PreOr

11、derTraverse(pnode-lchild,visit); PreOrderTraverse(pnode-rchild,visit);/*中序遍歷二叉樹*/void InOrderTraverse(BiTree tree,void(*visit)() BiTNode * pnode = tree;if(pnode)InOrderTraverse(pnode-lchild,visit); visit(pnode-data);InOrderTraverse(pnode-rchild,visit);/*后序遍歷二叉樹*/void PostOrderTraverse(BiTree tree,vo

12、id(*visit)() BiTNode * pnode = tree;if(pnode) PostOrderTraverse(pnode-lchild,visit); PostOrderTraverse(pnode-rchild,visit);visit(pnode-data);void print(Item item) printf(%d ,item);int main(int argc, constchar * argv) BiTNode * n1 = MakeNode(10,NULL,NULL);BiTNode * n2 = MakeNode(20,NULL,NULL);BiTNode

13、 * n3 = MakeNode(30,n1,n2);BiTNode * n4 = MakeNode(40,NULL,NULL);BiTNode * n5 = MakeNode(50,NULL,NULL);BiTNode * n6 = MakeNode(60,n4,n5);BiTNode * n7 = MakeNode(70,NULL,NULL);BiTree tree = InitBiTree(n7);SetLChild(tree,n3);SetRChild(tree,n6);printf(”樹的深度為:%d,GetDepth(tree);printf(n先序遍歷如下:”);PreOrderTraverse(tree,print);printf(n中序遍歷如下:);In

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 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

提交評論