C語言數(shù)據(jù)結構二叉樹簡單應用
在計算機科學中,二叉樹是每個節(jié)點最多有兩個子樹的樹結構。本文是百分網小編搜索整理的關于C語言數(shù)據(jù)結構二叉樹簡單應用的相關資料,供參考學習,希望對大家有所幫助!想了解更多相關信息請持續(xù)關注我們應屆畢業(yè)生考試網!
通常子樹被稱作“左子樹”(left subtree)和“右子樹”(right subtree),接下來我就在這里給大家介紹一下二叉樹在算法中的簡單使用:
我們要完成總共有
。1)二叉樹的創(chuàng)建
。2)二叉樹的先中后序遞歸遍歷
。3)統(tǒng)計葉子結點的總數(shù)
。4)求樹的高度
。5)反轉二叉樹
(6)輸出每個葉子結點到根節(jié)點的路徑
。7)輸出根結點到每個葉子結點的路徑。
定義二叉樹結點類型的結構體
typedef struct node{
char data;
struct node *Lchild;
struct node *Rchild;
}BiTNode,*BiTree;
int cnt=0;/pic/p>
二叉樹的創(chuàng)建
BiTNode *Create(){ /pic/p>
char ch;
BiTNode *s;
ch=getchar();
if(ch=='#')erchashu
return NULL;
s=(BiTNode *)malloc(sizeof(BiTNode));
s->data=ch;
s->Lchild=Create();
s->Rchild=Create();
return s;
}
二叉樹的先序、中序、后序遞歸遍歷
void PreOrder(BiTree root){ /pic/p>
if(root){
printf("%c ",root->data);
PreOrder(root->Lchild);
PreOrder(root->Rchild);
}
}
void InOrder(BiTree root){ /pic/p>
if(root){
InOrder(root->Lchild);
printf("%c ",root->data);
InOrder(root->Rchild);
}
}
void PostOrder(BiTree root){ /pic/p>
if(root){
PostOrder(root->Lchild);
PostOrder(root->Rchild);
printf("%c ",root->data);
}
}
統(tǒng)計葉子結點個數(shù):
void LeafCountNode(BiTree root){ /pic/p>
if(root){
if(!root->Lchild && !root->Rchild)
cnt++;
LeafCountNode(root->Lchild);
LeafCountNode(root->Rchild);
}
}
輸出各個葉子結點值:
void IInOrder(BiTree root){ /pic/p>
if(root){
IInOrder(root->Lchild);
if(!root->Lchild && !root->Rchild)
printf("%c ",root->data);
IInOrder(root->Rchild);
}
}
求樹的高度:
int PostTreeDepth(BiTree root){ /pic/p>
int h1,h2,h;
if(root==NULL){
return 0;
}
else{
h1=PostTreeDepth(root->Lchild);
h2=PostTreeDepth(root->Rchild);
h=(h1>h2?h1:h2)+1;
return h;
}
}
反轉二叉樹:
void MirrorTree(BiTree root){ /pic/p>
BiTree t;
if(root==NULL)
return;
else{
t=root->Lchild;
root->Lchild=root->Rchild;
root->Rchild=t;
MirrorTree(root->Lchild);
MirrorTree(root->Rchild);
}
}
輸出每個葉子結點到根節(jié)點的路徑:
void OutPutPath(BiTree root,char path[],int len){ /pic/p>
if(root){
if(!root->Lchild && !root->Rchild){
printf("%c ",root->data);
for(int i=len-1;i>=0;i--)
printf("%c ",path[i]);
printf("\n");
}
path[len]=root->data;
OutPutPath(root->Lchild,path,len+1);
OutPutPath(root->Rchild,path,len+1);
}
}
輸出根到每個葉子結點的路徑:
void PrintPath(BiTree root,char path[],int l){ /pic/p>
int len=l-1;
if(root){
if(root->Lchild==NULL && root->Rchild==NULL){
path[len]=root->data;
for(int i=9;i>=len;i--)
printf("%c ",path[i]);
printf("\n");
}
path[len]=root->data;
PrintPath(root->Lchild,path,len);
PrintPath(root->Rchild,path,len);
}
}
測試代碼:
int main(void){
int h,len;
char path[20];
BiTree root;
root=Create();
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
h=PostTreeDepth(root);
printf("樹的高度為:High=%d\n",h);
/pic/p>
/pic/p>
/pic/p>
/pic/p>
/pic/p>
return 0;
}
【C語言數(shù)據(jù)結構二叉樹簡單應用】相關文章:
C語言的應用02-25
C語言知識總結及其簡單應用03-08
C語言的應用知識09-30
C語言的主要應用12-14
C語言知識點及其簡單應用02-06
C語言數(shù)據(jù)結構實現(xiàn)鏈表逆序并輸出10-22
C語言的應用有哪些02-12
C語言的reduce方法應用09-21