-
大小: 72KB文件類型: .zip金幣: 2下載: 0 次發布日期: 2021-05-07
- 語言: 其他
- 標簽:
資源簡介
廣工數據結構課程設計實驗-二叉樹的實現(代碼+實驗報告+運行程序)包含二叉樹的基本操作
廣工數據結構課程設計實驗-二叉樹的實現(代碼+實驗報告+運行程序)包含二叉樹的基本操作

代碼片段和文件信息
#include?“StackAndQueue.h“?
Status?InitBiTree(BiTree?&T){ //創建一棵空二叉樹?
T=NULL;
return?OK;
}?
BiTree?MakeBiTree(TElemType?e?BiTree?L??BiTree?R)?{ //創建一棵二叉樹T,其中根結點的值為eL和R分別作為左子樹和右子樹?
BiTree?T;
T?=?(BiTNode?*)?malloc?(sizeof(BiTNode))?;
if(T==NULL)?return?NULL;
T->data?=?e;
T->lchild?=?L;
T->rchild?=?R;
return?T;????
}?
BiTree?CreateBiTree(char?*definition?int?&i){?//?按definition先序構造二叉樹的二叉鏈表,i為definition的當前位標,初值為0
BiTree?T;
TElemType?c?=?definition[i++];
if(‘#‘==?c)?InitBiTree(T)?; //空樹
else{
T=MakeBiTree(cNULLNULL); //構造以c為data域的結點?
T->lchild?=?CreateBiTree(definitioni)?; //構造左子樹?
T->rchild?=?CreateBiTree(definitioni)?; //構造右子樹?
}?
return?T;
}??
TriTree?CreateTriTree(char?*definitionint?&i){?//?按definition先序構造二叉樹的三叉鏈表,i為definition的當前位標,初值為0
TriTree?T;
TElemType?c?=?definition[i++];
if(‘#‘==c)?T=NULL; //空樹?
else?{
T=(TriTree)?malloc(sizeof(TriTNode));
if(T==NULL)?return?NULL;
T->data?=?c; //給結點賦值?
T->parent=NULL; //根結點無雙親?
T->lchild?=?CreateTriTree(definitioni); //構造左子樹?
if(T->lchild)?T->lchild->parent?=?T; //如果存在左子樹,賦值其雙親值?
T->rchild?=?CreateTriTree(definitioni)?; //構造右子樹?
if(T->rchild)?T->rchild->parent?=?T; //如果存在右子樹,賦值其雙親值?
}?
return?T;
}
void?DestroyBiTree(BiTree?&T)?{? //銷毀二叉樹?
if(T!=NULL)?{
DestroyBiTree(T->lchild); //用遞歸的方法銷毀二叉樹的左子樹?
DestroyBiTree(T->rchild); //用遞歸的方法銷毀二叉樹的右子樹
free(T);
T=NULL; //由于free?執行完以后,那數據還存在,還可能被調用,將T設為空?,就訪問不到該內存?
}
}?
??
Status?BiTreeEmpty(BiTree?T)?{? //二叉樹判空,若為空返回TRUE,否則FALSE?
if(T==NULL)?return?TRUE;
else?return?FALSE;
}?
Status?BreakBiTree(BiTree?&TBiTree?&LBiTree?&R)?{ //將一棵二叉樹?T?分解成根,左子樹和右子樹三部分?
?if(T!=NULL)?{
? L?=?T->lchild; //L為原二叉樹的左子樹?
? R?=?T->rchild;? //R為原二叉樹的右子樹?
? T->lchild?=?NULL; //將二叉樹的根結點的左右子樹設為空。?
? T->rchild?=?NULL;
? return?OK;
?}?
?return?ERROR;? //如果二叉樹T為空樹?
}?
Status?ReplaceLeft(BiTree?&TBiTree?<)?{ //替換左子樹。若T非空,則用LT?替換T的左子樹,并用LT返回T的原有左子樹?
BiTree?t;
if(T==NULL)?return?ERROR; //樹空
t?=?T->lchild;
T->lchild?=?LT; //LT作為T的左子樹
LT?=?t;
return?OK;?
}
Status?ReplaceRight(BiTree?&TBiTree?&RT)?{ //替換右子樹。若T非空,則用RT?替換T的右子樹,并用RT返回T的原有右子樹?
BiTree?t;
if(T==NULL)?return?ERROR; //樹空?
t?=?T?->?rchild;
T->rchild?=?RT; //RT作為T的右子樹?
RT?=?t; //RT返回T的先前右子樹?
return?OK;
}
Status?CutLeft(BiTree?&TBiTree?<)?{ //剪除左子樹,若?T非空,則剪除T的左子樹,并用LT返回?
if(T==NULL)??{
LT?=?NULL;?return?ERROR; //樹空?
}
LT?=?T->lchild; //LT返回T的左子樹?
T->lchild?=?NULL; ? ? //剪除左子樹
return?OK;?
}
Status?CutRight(BiTree?&TBiTree?&RT)?{ //剪除右子樹,若?T非空,則剪除T的右子樹,并用RT返回?
if(T==NULL)??{
RT?=?NULL;?return?ERROR; //樹空?
}
RT?=?T->rchild; //RT返回T的右子樹?
T->rchild?=?NULL; ? ? //剪除右子樹
return?OK;
}
int?BiTreeDepth(BiTree?T)?{ //計算二叉樹的深度?
int?depthLeftdepthRight;
if(T==NULL)?return?0;
else{
depthLeft?=?BiTreeDepth(T->lchild); // 求出左子樹的深度?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2016-09-07?17:59??二叉樹的實現\
?????文件???????11000??2016-01-11?20:52??二叉樹的實現\BinaryTree.cpp
?????文件??????172323??2016-01-12?16:58??二叉樹的實現\BinaryTree.exe
?????文件?????????508??2016-01-06?14:22??二叉樹的實現\head.h
?????文件????????2502??2016-01-06?14:29??二叉樹的實現\StackAndQueue.h
?????文件?????????162??2016-09-07?17:59??二叉樹的實現\~$實驗報告.doc
?????文件???????14205??2016-01-12?16:46??二叉樹的實現\測試用例.docx
- 上一篇:基于自適應性BP神經網絡的優化算法
- 下一篇:數據庫課程設計完整版
評論
共有 條評論