日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 充電吧
[導(dǎo)讀]二叉排序樹的基本思想是將序列中的數(shù)讀入一個二叉樹,在讀入時遵循一定的規(guī)則:比如,如果二叉樹的一個節(jié)點有左子節(jié)點,那么左子節(jié)點一定比父節(jié)點的值小;如果一個節(jié)點有右子節(jié)點,那么右子節(jié)點一定比父節(jié)點的值大。

二叉排序樹的基本思想是將序列中的數(shù)讀入一個二叉樹,在讀入時遵循一定的規(guī)則:比如,如果二叉樹的一個節(jié)點有左子節(jié)點,那么左子節(jié)點一定比父節(jié)點的值??;如果一個節(jié)點有右子節(jié)點,那么右子節(jié)點一定比父節(jié)點的值大。在二叉排序樹制造完成后,通過采用中序遍歷的方法讀取二叉樹節(jié)點的值到序列中,就可以得到一個升序序列。

讀取二叉排序樹的操作為:

1,如果節(jié)點非空:


1.1,如果節(jié)點的左子節(jié)點非空,將左子節(jié)點設(shè)為操作節(jié)點,返回1;

1.2,如果節(jié)點左子節(jié)點為空,取節(jié)點數(shù)據(jù)到序列中;


1.2.1,如果節(jié)點右子節(jié)點非空,并且節(jié)點的父節(jié)點非空,令當前節(jié)點的右子節(jié)點為父節(jié)點的子節(jié)點;如果父節(jié)點為空,令右子節(jié)點為操作節(jié)點;

1.2.2,如果右子節(jié)點為空,并且父節(jié)點非空,令父節(jié)點的左子節(jié)點為空,令父節(jié)點為操作節(jié)點,釋放當前節(jié)點;,

2,如果節(jié)點為空,輸出序列。


C++代碼實現(xiàn)



#include#includeusing?namespace?std;

templatevoid?BinaryTreeSort(vector&vec);

int?main()
{
	int?att[]?=?{?10,?4,?23,?46,?20,?5,?3,?88,?8,?44,?53,?25,?86,?32,?16,?11?};
	vectorvec(&att[0],?&att[sizeof(att)?/?sizeof(int)]);

	BinaryTreeSort(vec);

	return?0;
}

templatevoid?BinaryTreeSort(vector&vec)
{

	int?VSize?=?vec.size();
	if?(VSize?data?=?vec[0];
	headNode->father?=?NULL;
	headNode->left?=?NULL;
	headNode->right?=?NULL;

	for?(int?vIdx?=?1;?vIdx?<?VSize;?vIdx++)
	{
		SortNode?*locNode?=?new?SortNode();
		locNode->data?=?vec[vIdx];
		locNode->father?=?NULL;
		locNode->left?=?NULL;
		locNode->right?=?NULL;

		SortNode?*tmpNode?=?headNode;

		while?(NULL?!=?tmpNode)
		{
			if?(locNode->data?<?tmpNode->data)
			{
				if?(NULL?==?tmpNode->left)
				{
					locNode->father?=?tmpNode;
					tmpNode->left?=?locNode;
					tmpNode?=?NULL;
				}
				else
				{
					tmpNode?=?tmpNode->left;
				}
			}
			else
			{
				if?(NULL?==?tmpNode->right)
				{
					locNode->father?=?tmpNode;
					tmpNode->right?=?locNode;
					tmpNode?=?NULL;
				}
				else
				{
					tmpNode?=?tmpNode->right;
				}
			}
		}
	}

	SortNode?*tmpNode?=?headNode;
	int?vIdx?=?0;
	while?(NULL?!=?tmpNode)
	{
		if?(NULL?==?tmpNode->left)
		{
			vec[vIdx++]?=?tmpNode->data;???//?if?left?child?is?null,?get?this?node?data
			if?(NULL?!=?tmpNode->right)????//?if?right?child?is?not?null,?set?right?child?as?father's?child
			{
				if?(NULL?!=?tmpNode->father)
				{
					if?(tmpNode?==?tmpNode->father->left)
						tmpNode->father->left?=?tmpNode->right;
					else?if?(tmpNode?==?tmpNode->father->right)
						tmpNode->father->right?=?tmpNode->right;
				}


				tmpNode->right->father?=?tmpNode->father;

				SortNode?*childNode?=?tmpNode->right;
				delete?tmpNode;
				tmpNode?=?childNode;
			}
			else
			{
				SortNode?*FartherNode?=?tmpNode->father;
				if?(NULL?!=?FartherNode)
					FartherNode->left?=?NULL;

				tmpNode->father?=?NULL;

				delete?tmpNode;
				tmpNode?=?FartherNode;
			}
		}
		else
		{
			tmpNode?=?tmpNode->left;
		}
	}

	vIdx?=?0;
	for?(;?vIdx?<?VSize;?vIdx++)
	{
		cout?<<?"index?"?<<?vIdx?<<?"?value?=?"?<<?vec[vIdx]?<<?endl;
	}


	return;
}



本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

所謂排序算法,即通過特定的算法因式將一組或多組數(shù)據(jù)按照既定模式進行重新排序。這種新序列遵循著一定的規(guī)則,體現(xiàn)出一定的規(guī)律,因此,經(jīng)處理后的數(shù)據(jù)便于篩選和計算,大大提高了計算效率。對于排序,我們首先要求其具有一定的穩(wěn)定性,...

關(guān)鍵字: 排序算法 算法

算法雖然廣泛應(yīng)用在計算機領(lǐng)域,但卻完全源自數(shù)學(xué)。實際上,最早的數(shù)學(xué)算法可追溯到公元前1600年-Babylonians有關(guān)求因式分解和平方根的算法。

關(guān)鍵字: 算法 排序算法

其實在 c++語言里面const修飾的才算是一個真正的常量,在 c 語言中 const 可以說是個“冒牌貨”。為什么會這樣?其實是 c++ 編譯器對 const 進行了加強,當 c++ 編譯器遇到常量聲明時,不會像 c...

關(guān)鍵字: c++ C語言 const

返回函數(shù)的引用去初始化一個新的引用這個和前面一樣,都是不會產(chǎn)生副本,但是現(xiàn)在是用返回值去初始化一個引用聲明c,也就是說這時候變成了變量temp的別名,在c的生命周期內(nèi)temp是一直有效的,這樣做完全可以。

關(guān)鍵字: c++ 返回值 引用聲明

C++是一種面向?qū)ο蟮母呒壋绦蛟O(shè)計語言,是C語言的超集。

關(guān)鍵字: c++ C語言

排序是數(shù)據(jù)處理中經(jīng)常運用的一種重要運算,排序的功能是將一個數(shù)據(jù)元素(記錄)的任意序列,重新排列成一個按照一個規(guī)則有序的序列。

關(guān)鍵字: 排序算法 C語言

以前也零零碎碎發(fā)過一些排序算法,但排版都不太好,又重新整理一次,排序算法是數(shù)據(jù)結(jié)構(gòu)的重要部分,系統(tǒng)地學(xué)習(xí)很有必要。

關(guān)鍵字: C語言 排序算法

在程序中處理數(shù)據(jù)時,為了提高抗干擾性、過濾掉干擾數(shù)據(jù),我們通常會加入濾波算法,而冒泡排序是最經(jīng)典、通用、易懂的算法。

關(guān)鍵字: 嵌入式 排序算法

今天繼續(xù)給大家分享排序算法里面的另外一種排序算法:歸并排序!

關(guān)鍵字: 嵌入式 排序算法

分析:這是Adobe 公司2007 年校園招聘的最新筆試題。這道題除了考察應(yīng)聘者的C++ 基本功底外,還能考察反應(yīng)能力,是一道很好的題目。 在Java 中定義了關(guān)鍵字final ,被final 修飾的

關(guān)鍵字: c++ class
關(guān)閉