前段時(shí)間,我寫了一個(gè)關(guān)于鏈表的集合操作,能夠?qū)㈡湵?、堆棧,?duì)列多種數(shù)據(jù)類型進(jìn)行可重復(fù)的多種基本操作將鏈表深入的剖析了一番,這次,我花了點(diǎn)時(shí)間寫了一個(gè)關(guān)于二叉樹的集合操作的程序,它的主要功能是能夠創(chuàng)建一棵二叉樹,并且能夠?qū)⑽覀儎?chuàng)建的這棵二叉樹用多種方式遍歷,例如:先根遍歷、中根遍歷、后跟遍歷,并且能夠隨時(shí)顯示我們的二叉樹的直觀構(gòu)造,以及打印出我們的葉子結(jié)點(diǎn),能夠隨時(shí)的釋放掉我們?yōu)槎鏄渌_辟的結(jié)點(diǎn)空間,然后自動(dòng)的提示我們構(gòu)造一棵新的二叉樹,能夠隨時(shí)的推出我們的當(dāng)前程序,并且在結(jié)束當(dāng)前程序的時(shí)候,能夠自動(dòng)得釋放掉我們所有的節(jié)點(diǎn)空間。
同時(shí),本程序的自動(dòng)糾錯(cuò)功能也很不錯(cuò)的,能夠糾出我們常見的容易忽視的錯(cuò)誤,實(shí)現(xiàn)實(shí)時(shí)的檢查功能。
本程序是經(jīng)過本人的精心設(shè)計(jì)和調(diào)試通過了的,要是大家對(duì)于二叉樹的概念和操作不是很熟悉的話,我想,通過仔細(xì)的揣摩本程序,定能夠替你解除心中的片片疑云。
本人本著為大家闡釋清楚,不留疑慮,不留問題的的原則,特地附上一份詳細(xì)的實(shí)驗(yàn)分析報(bào)告,大家仔細(xì)對(duì)照著著這個(gè)報(bào)告,結(jié)合源程序,一定能夠?qū)⒍鏄涞年P(guān)鍵技術(shù)搞的一清二楚!
若是本程序有什么不到之處或是有什么好的建議,不妨和本人聯(lián)系,我的聯(lián)系方式是:
QQ: 37170732 E-mail: owenstone@sina.com.cn
歡迎各位愛好Windows編程和MFC編程愛好者加我!
--------------------------------------以下是程序的代碼部分----------------------------------------
#include
#include
#include
#define NULL 0
#define DataType char
typedef struct BinTreeNode *PBinTreeNode;
typedef PBinTreeNode *PBinTree;
struct BinTreeNode
{ DataType info;
PBinTreeNode llink;
PBinTreeNode rlink;
};
PBinTreeNode Create_BinTree(void);
PBinTree Create_BinTreeRoot(void)
{PBinTree pbtree;
pbtree=(PBinTree)malloc(sizeof(struct BinTreeNode));
if(pbtree==NULL) pbtree=(PBinTree)realloc(pbtree,sizeof(struct BinTreeNode));
*pbtree=Create_BinTree();
return (pbtree);
}
PBinTreeNode Create_BinTreeNode(void)
{PBinTreeNode pbnode;
pbnode=(PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode==NULL) pbnode=(PBinTreeNode)realloc(pbnode,sizeof(struct BinTreeNode));
else pbnode->llink=pbnode->rlink=(PBinTreeNode)NULL;
return (pbnode);
}
int isalphabet(char i)
{
if (i >= 'a' && i <='z' || i >= 'A' && i <='Z' || i=='@')
return 1;
else return 0;
}
PBinTreeNode Create_BinTree(void)
{PBinTreeNode pbnode ;
DataType i;
printf("Please input a char:\t");
fflush(stdin);
scanf("%c",&i);
fflush(stdin);
while(!isalphabet(i))
{
printf("Sorry, your input char is not in alphabet, please input again:");
scanf("%c",&i);
fflush(stdin);
}
if(i=='@') pbnode= NULL;
else
{
pbnode = (PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode == NULL)
{
printf("Out of space!\n");
return pbnode ;
}
pbnode->info=i;
pbnode->llink=Create_BinTree();
pbnode->rlink=Create_BinTree();
}
return pbnode;
}
void outputTree(PBinTreeNode pbnode,int totalSpace)
{int i;
if(pbnode!=NULL)
{
totalSpace+=5;
outputTree(pbnode->rlink,totalSpace);
for(i=0;i printf("%c\n",pbnode->info);
outputTree(pbnode->llink,totalSpace);
}
}
同時(shí),本程序的自動(dòng)糾錯(cuò)功能也很不錯(cuò)的,能夠糾出我們常見的容易忽視的錯(cuò)誤,實(shí)現(xiàn)實(shí)時(shí)的檢查功能。
本程序是經(jīng)過本人的精心設(shè)計(jì)和調(diào)試通過了的,要是大家對(duì)于二叉樹的概念和操作不是很熟悉的話,我想,通過仔細(xì)的揣摩本程序,定能夠替你解除心中的片片疑云。
本人本著為大家闡釋清楚,不留疑慮,不留問題的的原則,特地附上一份詳細(xì)的實(shí)驗(yàn)分析報(bào)告,大家仔細(xì)對(duì)照著著這個(gè)報(bào)告,結(jié)合源程序,一定能夠?qū)⒍鏄涞年P(guān)鍵技術(shù)搞的一清二楚!
若是本程序有什么不到之處或是有什么好的建議,不妨和本人聯(lián)系,我的聯(lián)系方式是:
QQ: 37170732 E-mail: owenstone@sina.com.cn
歡迎各位愛好Windows編程和MFC編程愛好者加我!
--------------------------------------以下是程序的代碼部分----------------------------------------
#include
#include
#include
#define NULL 0
#define DataType char
typedef struct BinTreeNode *PBinTreeNode;
typedef PBinTreeNode *PBinTree;
struct BinTreeNode
{ DataType info;
PBinTreeNode llink;
PBinTreeNode rlink;
};
PBinTreeNode Create_BinTree(void);
PBinTree Create_BinTreeRoot(void)
{PBinTree pbtree;
pbtree=(PBinTree)malloc(sizeof(struct BinTreeNode));
if(pbtree==NULL) pbtree=(PBinTree)realloc(pbtree,sizeof(struct BinTreeNode));
*pbtree=Create_BinTree();
return (pbtree);
}
PBinTreeNode Create_BinTreeNode(void)
{PBinTreeNode pbnode;
pbnode=(PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode==NULL) pbnode=(PBinTreeNode)realloc(pbnode,sizeof(struct BinTreeNode));
else pbnode->llink=pbnode->rlink=(PBinTreeNode)NULL;
return (pbnode);
}
int isalphabet(char i)
{
if (i >= 'a' && i <='z' || i >= 'A' && i <='Z' || i=='@')
return 1;
else return 0;
}
PBinTreeNode Create_BinTree(void)
{PBinTreeNode pbnode ;
DataType i;
printf("Please input a char:\t");
fflush(stdin);
scanf("%c",&i);
fflush(stdin);
while(!isalphabet(i))
{
printf("Sorry, your input char is not in alphabet, please input again:");
scanf("%c",&i);
fflush(stdin);
}
if(i=='@') pbnode= NULL;
else
{
pbnode = (PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode == NULL)
{
printf("Out of space!\n");
return pbnode ;
}
pbnode->info=i;
pbnode->llink=Create_BinTree();
pbnode->rlink=Create_BinTree();
}
return pbnode;
}
void outputTree(PBinTreeNode pbnode,int totalSpace)
{int i;
if(pbnode!=NULL)
{
totalSpace+=5;
outputTree(pbnode->rlink,totalSpace);
for(i=0;i
outputTree(pbnode->llink,totalSpace);
}
}