国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)結(jié)構(gòu):二叉樹的基本操作(用遞歸實(shí)現(xiàn))

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)結(jié)構(gòu):二叉樹的基本操作(用遞歸實(shí)現(xiàn))。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

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

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

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

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

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

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

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

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

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

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

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

代碼如下所示:

1、源程序及主要算法說明
#include<iostream>
using namespace std;

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

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

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

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

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

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

int main()
{
	BiTree tree;
	cout<<"請輸入建立二叉鏈表的序列:\n";
	cout<<"請輸入根節(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 = " <<n1 ;
	cout<<"\n";
	
	cout<<endl;
	return 0;
}


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

數(shù)據(jù)結(jié)構(gòu):二叉樹的基本操作(用遞歸實(shí)現(xiàn))

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

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

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

本篇文章的內(nèi)容如上所示,希望能為大家學(xué)習(xí)提供幫助~喜歡可以點(diǎn)贊收藏~文章來源地址http://www.zghlxwxcb.cn/news/detail-463382.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu):二叉樹的基本操作(用遞歸實(shí)現(xiàn))的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的存儲(chǔ)與基本操作的實(shí)現(xiàn)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的存儲(chǔ)與基本操作的實(shí)現(xiàn)

    二叉樹的存儲(chǔ)結(jié)構(gòu)分為: 順序存儲(chǔ) 和類似于 鏈表的鏈?zhǔn)酱鎯?chǔ) 這里博主講一下鏈?zhǔn)酱鎯?chǔ) 二叉樹的鏈?zhǔn)酱鎯?chǔ)是通過一個(gè)一個(gè)的節(jié)點(diǎn)引用起來的,常見的表示方式有 二叉和三叉 表示方式 二叉表示: 三叉表示: 這里博主主要講解一下孩子表示法 在學(xué)習(xí)二叉樹的基本操作前,需

    2024年02月04日
    瀏覽(25)
  • 二叉樹的基本操作-C語言實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)作業(yè)

    二叉樹的基本操作-C語言實(shí)現(xiàn)-數(shù)據(jù)結(jié)構(gòu)作業(yè)

    目錄 ?(1)二叉樹的創(chuàng)建; (2)二叉樹的先序、中序和后序遍歷輸出; (3)輸出二叉樹的葉子節(jié)點(diǎn)和度為2的節(jié)點(diǎn)的數(shù)量; (4)輸出二叉樹的深度; (5)將二叉樹所有節(jié)點(diǎn)的左右子樹互換(左子樹變右子樹,右子樹變左子樹); (6)參考書上,二叉樹按層次輸出(一行輸出一層); (7)刪除二

    2024年02月04日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告,二叉樹的基本操作(C語言)

    數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告,二叉樹的基本操作(C語言)

    作者:命運(yùn)之光 專欄:數(shù)據(jù)結(jié)構(gòu) 實(shí)驗(yàn)六 二叉樹的基本操作 實(shí)驗(yàn)環(huán)境:Visual C++或Dev C++ 實(shí)驗(yàn)?zāi)康模?1、掌握二叉樹創(chuàng)建; 2、掌握二叉樹的遍歷及常用算法。 實(shí)驗(yàn)內(nèi)容: 通過完全前序序列創(chuàng)建一棵二叉樹,完成如下功能: 1)輸出二叉樹的前序遍歷序列; 2)輸出二叉樹的中序遍

    2024年02月09日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)記錄——初識二叉樹(定義、五種基本形態(tài)、幾種特殊的二叉樹、二叉樹的重要性質(zhì)、初識基本操作函數(shù))

    數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)記錄——初識二叉樹(定義、五種基本形態(tài)、幾種特殊的二叉樹、二叉樹的重要性質(zhì)、初識基本操作函數(shù))

    目錄 二叉樹的定義 二叉樹具體的五種基本形態(tài) 1.空樹 2.只有一個(gè)節(jié)點(diǎn) 3.有左子樹,但右子樹為空 4.有右子樹,但左子樹為空 ?5.左右兩子樹都不為空 特殊二叉樹 斜二叉樹 滿二叉樹? 完全二叉樹 二叉樹的幾個(gè)重要性質(zhì) 初識二叉樹的幾個(gè)操作函數(shù)? 二叉樹T: 一個(gè)有窮的節(jié)點(diǎn)

    2024年02月03日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的基本概念

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的基本概念

    樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。把它叫做樹是因?yàn)樗雌饋硐褚豢玫箳斓臉?,也就是說它是根朝上,而葉朝下的 子樹不能有交集,就是不能有閉環(huán).N個(gè)節(jié)點(diǎn)兩個(gè)一條邊,所以是N-1個(gè)邊,父節(jié)點(diǎn)的概念在下面講. 節(jié)點(diǎn)的度

    2024年02月08日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)】_7.二叉樹概念與基本操作

    【數(shù)據(jù)結(jié)構(gòu)】_7.二叉樹概念與基本操作

    目錄 1.樹形結(jié)構(gòu) 1.1 樹的概念 1.2 樹的相關(guān)概念 1.3 樹的表示 1.4 樹在實(shí)際中的應(yīng)用—表示文件系統(tǒng)的目錄樹結(jié)構(gòu) ?編輯?2.二叉樹 2.1 概念 2.2 特殊二叉樹 ?2.3 二叉樹的性質(zhì) 2.4 二叉樹的存儲(chǔ)結(jié)構(gòu) 2.4.1 順序存儲(chǔ)結(jié)構(gòu)(數(shù)組存儲(chǔ)結(jié)構(gòu)) 2.4.2 鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu) 2.5 二叉樹的基本操作 2

    2024年02月12日
    瀏覽(62)
  • 【數(shù)據(jù)結(jié)構(gòu)入門】-二叉樹的基本概念

    【數(shù)據(jù)結(jié)構(gòu)入門】-二叉樹的基本概念

    個(gè)人主頁:平行線也會(huì)相交 歡迎 點(diǎn)贊?? 收藏? 留言? 加關(guān)注??本文由 平行線也會(huì)相交 原創(chuàng) 收錄于專欄【數(shù)據(jù)結(jié)構(gòu)初階(C實(shí)現(xiàn))】 今天的內(nèi)容可是一個(gè)大頭,比以往學(xué)的內(nèi)容上了一個(gè)檔次。大家對于這塊內(nèi)容一定要好好學(xué),不是很理解的地方一定要及時(shí)解決,要不然到

    2023年04月10日
    瀏覽(24)
  • 愛上數(shù)據(jù)結(jié)構(gòu):二叉樹的基本概念

    愛上數(shù)據(jù)結(jié)構(gòu):二叉樹的基本概念

    ? ? ??個(gè)人主頁 : guoguoqiang. ?? 專欄 : 數(shù)據(jù)結(jié)構(gòu) ? 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個(gè)有限結(jié)點(diǎn)組成一個(gè)具有層次關(guān)系的集合。把它叫做樹是因 為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 沒有前驅(qū)節(jié)點(diǎn)的結(jié)點(diǎn)叫做根結(jié)點(diǎn) 在樹中,子樹不

    2024年04月14日
    瀏覽(18)
  • 數(shù)據(jù)結(jié)構(gòu)——二叉樹的基本概念及順序存儲(chǔ)(堆)

    數(shù)據(jù)結(jié)構(gòu)——二叉樹的基本概念及順序存儲(chǔ)(堆)

    目錄 一.前言 二.樹概念及結(jié)構(gòu) 2.1 樹的概念 2.2 樹的相關(guān)概念 2.3 樹的表現(xiàn) 2.4 樹在實(shí)際中的應(yīng)用(表示文件系統(tǒng)的目錄樹結(jié)構(gòu)) 三.二叉樹的概念及結(jié)構(gòu) 3.1 概念 3.2 特殊的二叉樹 3.3?二叉樹的性質(zhì) 3.4 二叉樹的存儲(chǔ)結(jié)構(gòu) 3.4.1 順序存儲(chǔ) 3.4.2 鏈?zhǔn)酱鎯?chǔ) 四.二叉樹順序結(jié)構(gòu)及實(shí)現(xiàn)

    2024年02月08日
    瀏覽(30)
  • 數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)記錄——平衡二叉樹(基本介紹、平衡因子、平衡二叉樹的定義、平衡二叉樹的高度)

    數(shù)據(jù)結(jié)構(gòu)和算法學(xué)習(xí)記錄——平衡二叉樹(基本介紹、平衡因子、平衡二叉樹的定義、平衡二叉樹的高度)

    目錄 基本介紹 平衡因子 平衡二叉樹? 平衡二叉樹的高度? 什么是平衡二叉樹? 以一個(gè)例子來解釋一下: 搜索樹結(jié)點(diǎn)按不同的插入次序,將會(huì)導(dǎo)致不同的深度和平均查找長度ASL ? 在二叉搜索樹中查找一個(gè)元素:? (a)要找到Jan,需要查找一次;要找到Feb,需要查找兩次;

    2023年04月26日
    瀏覽(40)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包