?? 二叉樹的實(shí)現(xiàn).cpp
字號(hào):
#include<iostream.h>
#define MAXSIZE 100
typedef struct BiTNode
{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode;
/*****由前序遍歷序列和中序遍歷序列構(gòu)造二叉樹*****/
BiTNode *CreateBiTree(char *pre,char *mid,int n)
{
BiTNode *T;
char *search;
int k;
T=new(BiTNode);
T->data=*pre;
for(search=mid;search<mid+n;search++)//在中序序列中找到根
if(*search==*pre)
break;
k=search-mid;//左子樹的結(jié)點(diǎn)個(gè)數(shù)
T->lchild=CreateBiTree(pre+1,mid,k);//遞歸構(gòu)造左子樹
T->rchild=CreateBiTree(pre+k+1,search+1,n-k-1);//遞歸構(gòu)造右子樹
return T;
}
/*****層次遍歷二叉樹*****/
void LevelFirstTraverse(BiTNode *T)
{
struct Queue
{
BiTNode *base[MAXSIZE];
int front,rear;
};
struct Queue Q;
Q.front=0;
Q.rear=0;
if(T!=NULL)
{
cout<<T->data;
Q.base[Q.rear]=T;
Q.rear++;
while(Q.front!=Q.rear)
{
T=Q.base[Q.front];
Q.front++;
if(T->lchild!=NULL)
{
cout<<T->lchild->data;
Q.base[Q.rear]=T->lchild;
Q.rear++;
}
if(T->rchild!=NULL)
{
cout<<T->rchild->data;
Q.base[Q.rear]=T->rchild;
Q.rear++;
}
}
}
}
/*****求二叉樹的深度*****/
int BiTreeDepth(BiTNode *T)
{
int ldep,rdep;
if(T==NULL)
return 0;
else
{
ldep=BiTreeDepth(T->lchild);
rdep=BiTreeDepth(T->rchild);
if(ldep>rdep)
return(ldep+1);
else
return(rdep+1);
}
}
/*****求二叉樹的葉子數(shù)*****/
int Leavesnum(BiTNode *T)
{
int Lleaves,Rleaves;
if(T==NULL)
return 0;
else if(T->lchild==NULL&&T->rchild==NULL)
return 1;
else
{
Lleaves=Leavesnum(T->lchild);
Rleaves=Leavesnum(T->rchild);
return(Lleaves+Rleaves);
}
}
void main()
{
BiTNode *T;
char pre[]="abcdef",mid[]="bcaedf";
int leavesnum,depth,num;
cout<<"請(qǐng)輸入二叉樹的結(jié)點(diǎn)個(gè)數(shù):";
cin>>num;
T=CreateBiTree(pre,mid,num);
LevelFirstTraverse(T);
depth=BiTreeDepth(T);
leavesnum=Leavesnum(T);
cout<<"二叉樹的深度為:"<<depth<<endl;
cout<<"二叉樹的葉子數(shù)為:"<<leavesnum<<endl;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -