真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

數(shù)據(jù)結(jié)構(gòu):二叉樹(shù)的基本操作(用遞歸實(shí)現(xiàn))-創(chuàng)新互聯(lián)

???本文將通過(guò)完成以下內(nèi)容來(lái)展示二叉樹(shù)的基本操作,代碼解釋標(biāo)注全面而且清晰,代碼書(shū)寫(xiě)也十分規(guī)范,適合初學(xué)者進(jìn)行學(xué)習(xí),本篇文章算是本人的一些學(xué)習(xí)記錄分享,希望對(duì)有需要的小伙伴提供一些幫助~

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供漢南企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、HTML5、小程序制作等業(yè)務(wù)。10年已為漢南眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

本文的內(nèi)容為:

用遞歸的方法實(shí)現(xiàn)以下算法:

1.以二叉鏈表表示二叉樹(shù),建立一棵二叉樹(shù)(算法5.3);

2.輸出二叉樹(shù)的中序遍歷結(jié)果(算法5.1);

3.輸出二叉樹(shù)的前序遍歷結(jié)果(見(jiàn)講稿);

4.輸出二叉樹(shù)的后序遍歷結(jié)果(見(jiàn)講稿);

5.計(jì)算二叉樹(shù)的深度(算法5.5);

6.統(tǒng)計(jì)二叉樹(shù)的結(jié)點(diǎn)個(gè)數(shù)(算法5.6);

7.統(tǒng)計(jì)二叉樹(shù)的葉結(jié)點(diǎn)個(gè)數(shù);

8.統(tǒng)計(jì)二叉樹(shù)的度為1的結(jié)點(diǎn)個(gè)數(shù);

代碼如下所示:
1、源程序及主要算法說(shuō)明
#includeusing namespace std;

//二叉樹(shù)的二叉鏈表存儲(chǔ)表示
typedef struct BiNode
{				
	char data;						//結(jié)點(diǎn)數(shù)據(jù)域
	struct BiNode *lchild,*rchild;	//左右孩子指針
}BiTNode,*BiTree;

//1. 以二叉鏈表表示二叉樹(shù),建立一棵二叉樹(shù)(算法5.3);
void CreateBiTree(BiTree &T)
{	
//按先序次序輸入二叉樹(shù)中結(jié)點(diǎn)的值(一個(gè)字符),創(chuàng)建二叉鏈表表示的二叉樹(shù)T
	char ch;
	cin>>ch;
	if(ch=='#')   T=NULL;  	//遞歸結(jié)束,建空樹(shù)
	else{
   	 	T=new BiTNode;    T->data=ch; 	//生成根結(jié)點(diǎn)
		cout<<"請(qǐng)輸入"<data<<"的左孩子(沒(méi)有左孩子輸入#)";
    	CreateBiTree(T->lchild);  //遞歸創(chuàng)建左子樹(shù)
   		cout<<"請(qǐng)輸入"<data<<"的右孩子(沒(méi)有左孩子輸入#)";
    	CreateBiTree(T->rchild); //遞歸創(chuàng)建右子樹(shù)
  }																	
}									//CreateBiTree
//2.輸出二叉樹(shù)的中序遍歷結(jié)果(算法5.1);					
void InOrderTraverse(BiTree T)
{  
 	if(T){   
     InOrderTraverse(T->lchild); 
     cout<data;
     InOrderTraverse(T->rchild);}
}

//3.輸出二叉樹(shù)的前序遍歷結(jié)果(見(jiàn)講稿);
void PreOrderTraverse(BiTree T)
{
	if(T){     
     cout<data; 
     PreOrderTraverse(T->lchild); 
     PreOrderTraverse(T->rchild);
} 
}
// 4.輸出二叉樹(shù)的后序遍歷結(jié)果(見(jiàn)講稿);
void PostOrderTraverse(BiTree T)
{
	if(T){
     PostOrderTraverse(T->lchild); 
     PostOrderTraverse(T->rchild); 
     cout<data; 
} 
}

//5.計(jì)算二叉樹(shù)的深度(算法5.5);
int Depth(BiTree T) {
{    int m,n;
	if(T == NULL ) return 0;        //如果是空樹(shù),深度為0,遞歸結(jié)束
	else 
	{	m=Depth(T->lchild);			//遞歸計(jì)算左子樹(shù)的深度記為m
		n=Depth(T->rchild);			//遞歸計(jì)算右子樹(shù)的深度記為n
		if(m>n) return(m+1);		//二叉樹(shù)的深度為m 與n的較大者加1
		else return (n+1);
	}
}
}

//6.統(tǒng)計(jì)二叉樹(shù)的結(jié)點(diǎn)個(gè)數(shù)(算法5.6);
int NodeCount(BiTree T){
 	if(T==NULL) return 0;  			// 如果是空樹(shù),則結(jié)點(diǎn)個(gè)數(shù)為0,遞歸結(jié)束
     	else return NodeCount(T->lchild)+ NodeCount(T->rchild) +1;
    	 //否則結(jié)點(diǎn)個(gè)數(shù)為左子樹(shù)的結(jié)點(diǎn)個(gè)數(shù)+右子樹(shù)的結(jié)點(diǎn)個(gè)數(shù)+1
} 

//7.統(tǒng)計(jì)二叉樹(shù)的葉結(jié)點(diǎn)個(gè)數(shù);
int LeafCount(BiTree T){
 	if(T==NULL) 	//如果是空樹(shù)返回0
		return 0;
	if (T->lchild == NULL && T->rchild == NULL)
		return 1; //如果是葉子結(jié)點(diǎn)返回1
	else return LeafCount(T->lchild) + LeafCount(T->rchild);
}

//8.統(tǒng)計(jì)二叉樹(shù)的度為1的結(jié)點(diǎn)個(gè)數(shù);
//	n=n0+n1+n2; n2=n0-1; n1=n-n0-n2=n-n0-(n0-1)=n-2n0+1
int n1Count(BiTree T,int n,int n0){
	if(T==NULL) 	//如果是空樹(shù)返回0
		return 0;
	
	int n1=0; 
	n1=n-2*n0+1;
	
	if (n1<0) 
		return 0;
		
	return n1;
}

int main()
{
	BiTree tree;
	cout<<"請(qǐng)輸入建立二叉鏈表的序列:\n";
	cout<<"請(qǐng)輸入根節(jié)點(diǎn):";
	CreateBiTree(tree);
	
	cout<<"所建立的二叉鏈表先序序列:\n";
	PreOrderTraverse(tree);
	cout<<"\n";
	cout<<"所建立的二叉鏈表中序序列:\n";
	InOrderTraverse(tree);
	cout<<"\n";
	cout<<"所建立的二叉鏈表后序序列:\n";
	PostOrderTraverse(tree);
	cout<<"\n";
	
	int depth = Depth(tree);
	cout<<"所建立的二叉鏈表深度是:\n";
	cout<< "depth = "<< depth;
	cout<<"\n";
	
	cout<<"所建立的二叉鏈表結(jié)點(diǎn)個(gè)數(shù)是:\n";
	int nodeCount = NodeCount(tree);
	cout<< "nodeCount(n) = "<< nodeCount;
	cout<<"\n";
	
	cout<<"所建立的二叉鏈表葉結(jié)點(diǎn)個(gè)數(shù)是:\n";
	int leafCount = LeafCount(tree);
	cout<< "leafCount(n0) = "<< leafCount;
	cout<<"\n";
	
	cout<<"所建立的二叉鏈表度為1的結(jié)點(diǎn)個(gè)數(shù)是:\n";
	int n1 = n1Count(tree,nodeCount,leafCount);
	cout<< "n1 = "<

運(yùn)行結(jié)果如下:

結(jié)論與體會(huì):

1通過(guò)本次操作我對(duì)于二叉樹(shù)的定義有了更清晰深刻的認(rèn)識(shí);

2.對(duì)于遍歷二叉樹(shù)中的三種不同的遍歷方法我也有了更深的認(rèn)識(shí),每個(gè)遍歷方法的操作定義最明顯的差異體現(xiàn)在訪問(wèn)根節(jié)點(diǎn)的順序不同,先序遍歷會(huì)在開(kāi)頭訪問(wèn)根節(jié)點(diǎn),而中序遍歷則會(huì)在中間,后序遍歷則會(huì)在最后訪問(wèn),只要改變程序中的輸出語(yǔ)句的順序,便可類似的實(shí)現(xiàn)三個(gè)遍歷。

本篇文章的內(nèi)容如上所示,希望能為大家學(xué)習(xí)提供幫助~喜歡可以點(diǎn)贊收藏~

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


當(dāng)前題目:數(shù)據(jù)結(jié)構(gòu):二叉樹(shù)的基本操作(用遞歸實(shí)現(xiàn))-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://weahome.cn/article/cciedi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部