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

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

這篇具有很好參考價值的文章主要介紹了AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

原理

平衡因子

AVL樹的插入insert

1. 新節(jié)點插入較高左子樹的左側(cè)---左左:右單旋

2.新節(jié)點插入較高右子樹的右側(cè)---右右:左單旋

新節(jié)點插入較高左子樹的右側(cè)---左右:先左單旋再右單旋

?新節(jié)點插入較高右子樹的左側(cè)---右左:先右單旋再左單旋?編輯


原理

AVL 樹是一種平衡搜索二叉樹,得名于其發(fā)明者的名字( Adelson-Velskii 以及 Landis)。(可見名字長的好處,命名都能多占一個字母出來)。在搜索樹的前提下平衡搜索二叉樹還定義如下:

  1. 左右子樹的高度差小于等于 1。
  2. 其每一個子樹均為平衡二叉樹。

我們以SGI版本AVL樹

先來查看樹中每個結(jié)點內(nèi)容。

template<class K,class V>
	struct AVLTreeNode
	{
		AVLTreeNode* _left;//左子樹
		AVLTreeNode* _right;//右子樹
		AVLTreeNode* _parent;//父節(jié)點
		pair<K, V> _kv;//數(shù)據(jù)存儲內(nèi)容
		int _bf;//平衡因子

		AVLTreeNode(pair<K, V>kv=pair<K, V>())//默認賦值構(gòu)造
			:_kv(kv)
			, _left(nullptr)
			, _right(nullptr)
			, _parent(nullptr)
			,_bf(0)
		{}
	};

左子樹與右子樹指針我們不做過多介紹。

我們存儲AVL樹是一種存儲key_value數(shù)據(jù)的樹,所以我們使用pair庫中類型存儲數(shù)據(jù)。

讓我們看看平衡因子是什么:

平衡因子

某個結(jié)點的右子樹的高度減去左子樹的高度得到的差值。

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

平衡因子在[-1,1]之間都是屬于平衡的平衡搜索二叉樹,每個結(jié)點都需要符合這個要求

在插入的過程中我們會破壞平衡,這個時候就需要對樹結(jié)點進行轉(zhuǎn)至操作。

AVL樹的插入insert

和普通搜索二叉樹一樣,先要尋找插入的位置。

        bool Insert(const pair<K, V>& kv)
		{
			if (_root == nullptr)
			{
				_root = new Node(kv);
			}
			else
			{
				Node* parent = nullptr;//保存上級指針,我們鏈接都是cur走到空指針創(chuàng)建結(jié)點給cur
                                       //但是這個新的結(jié)點需要被鏈接到樹中,我們不可以對
                                       //nullptr進行訪問上級的數(shù)據(jù),所以我們必須留一個parent            
                                       //用來鏈接新的結(jié)點。
				Node* cur = _root;
				while (cur)
				{
					parent = cur;
					if (cur->_kv.first > kv.first)
					{
						cur = cur->_left;//新數(shù)據(jù)小于當前數(shù)據(jù),向cur的左邊走
					}
					else if (cur->_kv.first < kv.first)
					{
						cur = cur->_right;//新數(shù)據(jù)大于當前數(shù)據(jù),向cur的右邊走
					}
					else
					{
						return false;//數(shù)據(jù)相同退出,并返回false
					}
				}
				cur = new Node(kv);//cur到了nullptr,創(chuàng)建新的結(jié)點。
                
                //新結(jié)點鏈接到樹
				if (parent->_kv.first <cur->_kv.first)
				{
					parent->_right = cur;
				}
				else
				{
					parent->_left = cur;
				}
				cur->_parent = parent;//處理新結(jié)點的_parent

插入結(jié)點后我們需要修改平衡因子,確保插入數(shù)據(jù)后我們的樹依舊是AVL樹。

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?更新平衡因子規(guī)則:

  1. ?新增在右,parent->bf+ +;新增在左,parent->bf--;
  2. 更新后,parent->bf == 1 or -1,說明parent插入前的平衡因子是0,說明左右子樹高度相等,插入后有一邊高,parent高度變了,該節(jié)點插入稍稍改變平衡,需要繼續(xù)往上更新平衡因子。
  3. 重新后,parent->bf == 0說parent插入前的平衡因子是1 or -1,說明左右子樹一邊高一邊低,插入后兩邊一樣高,插入填上了矮了那邊,parent所在子樹高度不變,不需要繼續(xù)往上更新
  4. 更新后,parent->bf == 2 or -2,說明parent插入前的平衡因子是1 or -1,已經(jīng)平衡臨界值,插入變成2 or -2,打破平衡,parent所在子樹需要旋轉(zhuǎn)處理
  5. 更新后,parent->bf > 2 r< -2的值,不可能,如果存在,則說明插入前就不是AVL樹,需要去檢查之前操作的問題,不需要再去考慮現(xiàn)在代碼的問題了。
while (parent)
{

	if (parent->_right == cur)//根結(jié)點(praent)的右子樹(cur)插入了一個結(jié)點當前根結(jié)點平衡因子++
	{
		++parent->_bf;
	}
	else /*if()  可以不寫這個*///根結(jié)點(praent)的左子樹(cur)插入了一個結(jié)點當前根結(jié)點平衡因子--
	{
		--parent->_bf;
	}
	if (parent->_bf == 0)//修改更新平衡因子后,查看當前平衡因子,為0代表根補齊了該根的低子樹
                         //parent所在子樹高度不變,不需要繼續(xù)往上更新
	{
		break;
	}
	else if (abs(parent->_bf) == 1)//parent原本為0的平衡因子被改變,高度變高了,parent左右被
                                   //該節(jié)點插入稍稍改變平衡,需要繼續(xù)往上更新平衡因子。
	{
		cur = parent;
		parent = parent->_parent;
	}
	else if (abs(parent->_bf) == 2)//說明parent插入前的平衡因子是1 or -1,已經(jīng)平衡臨界值,插
                                   //入變成2 or -2,打破平衡,parent所在子樹需要旋轉(zhuǎn)處理
	{
        //平衡被破壞。
	}
	else
	{
		std::cout << "AVL fail\n";
		assert(false);
	}
}

?這既是轉(zhuǎn)至:AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

但是不平衡的情況有無數(shù)種。

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?我們向大佬學習,得出4個旋轉(zhuǎn)大規(guī)律:

1. 新節(jié)點插入較高左子樹的左側(cè)---左左:右單旋

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

h為子樹高度。

當cur->bf==-1&&parent==-2是發(fā)生右單旋。

左左的意思是插入數(shù)據(jù)在parent的左子樹的左子樹上。

右單旋:以60結(jié)點為中心,向右旋轉(zhuǎn)AVL樹,允許h=0;

觀察圖像,我們發(fā)現(xiàn)就是改變鏈接關(guān)系,

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?這里有2個小細節(jié)點,

  1. b允許為空,所以b的parent操作前需要判斷b是否為nullptr
  2. 如果60就是整棵AVL樹的根就需要改變root指向30,并且將30的parent置空

在旋轉(zhuǎn)結(jié)束以后將cur與parent結(jié)點的bf置為0

完整代碼:

		void RotateR(Node* parent)
		{
			Node* subL = parent->_right;
			Node* subLR = subL->_right;

			parent->_left = subLR;
			if (subLR)
			{
				subLR->_parent = parent;
			}
			Node* pparent = parent->_parent;

			parent->_parent = subL;
			subL->_right = parent;
			if (_root == parent)
			{
				_root = subL;
				subL->_parent == nullptr;
			}
			else
			{
				if (pparent->_left == parent)
				{
					pparent->_left = subL;
				}
				else
				{
					pparent->_right = subL;
				}
				subL->_parent = pparent;
			}
			subL->_bf = 0;
			parent->_bf = 0;
		}

2.新節(jié)點插入較高右子樹的右側(cè)---右右:左單旋

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

原理與右單旋一樣。

查看代碼

void RotateL(Node* parent)
{
	Node* subR = parent->_right;
	Node* subRL = subR->_left;

	parent->_right = subRL;
	if (subRL)
	{
		subRL->_parent = parent;
	}
	Node* pparent = parent->_parent;

	parent->_parent = subR;
	subR->_left = parent;
	if (_root == parent)
	{
		_root = subR;
		subR->_parent == nullptr;
	}
	else
	{
		if (pparent->_left == parent)
		{
			pparent->_left = subR;
		}
		else
		{
			pparent->_right = subR;
		}
		subR->_parent = pparent;
	}
	subR->_bf = 0;
	parent->_bf = 0;
}

新節(jié)點插入較高左子樹的右側(cè)---左右:先左單旋再右單旋

什么意思呢?就是插入到了parent->left->right子樹上

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?如果這樣的情況只用右單旋。會發(fā)生什么呢?

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

該破壞平衡依舊破壞平衡,用左旋就是I變2一樣的。

所以這時候我們需要左右旋一起用。

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

我們將30結(jié)點的右子樹再一次拆分->40根結(jié)點+左右子樹。

我們需要先以30結(jié)點左旋該子樹。

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?在根據(jù)60結(jié)點做右旋旋轉(zhuǎn),我們把40的左子樹看成一個整體

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?然后重新定義40、60、30的平衡因子。

這里我們定義平衡因子又有講究,我們要觀察插入后旋轉(zhuǎn)前40結(jié)點的平衡因子。

三種情況:

旋轉(zhuǎn)前40->bf==1時,在旋轉(zhuǎn)完畢后30->bf=-1、60->bf=0、40->bf=0;

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

旋轉(zhuǎn)前40->bf==-1時,在旋轉(zhuǎn)完畢后30->bf=0、60->bf=1、40->bf=0;

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?還有一種特殊的情況40->bf==0;30->bf=0、60->bf=0、40->bf=0;

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

左右旋代碼代碼:

        void RotateLR(Node* parent)
		{
			Node* subL = parent->_left;
			Node* subLR = subL->_right;
			int bf = subLR->_bf;
			RotateL(subL);
			RotateR(parent);
			subLR->_bf = 0;
			if (bf == 1)
			{
				parent->_bf = 0;
				subL->_bf = -1;
			}
			else if (bf==-1)
			{
				parent->_bf = 1;
				subL->_bf = 0;
			}
			else if (bf == 0)
			{
				parent->_bf = 0;
				subL->_bf = 0;
			}
			else
			{
				assert(false);
			}
		}

?新節(jié)點插入較高右子樹的左側(cè)---右左:先右單旋再左單旋

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?重新賦值bf與左右:先左單旋再右單旋規(guī)則一樣

旋轉(zhuǎn)前40->bf==-1時,在旋轉(zhuǎn)完畢后30->bf=0、30->bf=1、40->bf=0;

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

?旋轉(zhuǎn)前40->bf==1時,在旋轉(zhuǎn)完畢后30->bf=-1、30->bf=0、40->bf=0;

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

??旋轉(zhuǎn)前40->bf==0時,在旋轉(zhuǎn)完畢后30->bf=-1、30->bf=0、40->bf=0

AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))

右左旋代碼:

		void RotateRL(Node* parent)
		{
			Node* subR = parent->_right;
			Node* subRL=subR->_left;
			int bf = subRL->_bf;
			RotateR(subR);
			RotateL(parent);
			subRL->_bf = 0;
			if (bf == 1)
			{
				parent = -1;
				subR = 0;
			}
			else if(bf==-1)
			{
				parent = 0;
				subR = 1;
			}
			else if (bf == 0)
			{
				parent = 0;
				subR = 0;
			}
			else
			{
				assert(0);
			}
		}

?AVLinsert完整代碼:

template<class K, class V>
	struct AVLTree
	{
		typedef AVLTreeNode<K, V> Node;
	public:
		bool Insert(const pair<K, V>& kv)
		{
			if (_root == nullptr)
			{
				_root = new Node(kv);
			}
			else
			{
				Node* parent = nullptr;
				Node* cur = _root;
				while (cur)
				{
					parent = cur;
					if (cur->_kv.first > kv.first)
					{
						cur = cur->_left;
					}
					else if (cur->_kv.first < kv.first)
					{
						cur = cur->_right;
					}
					else
					{
						return false;
					}
				}
				cur = new Node(kv);
				if (parent->_kv.first <cur->_kv.first)
				{
					parent->_right = cur;
				}
				else
				{
					parent->_left = cur;
				}
				cur->_parent = parent;
				while (parent)
				{

					if (parent->_right == cur)
					{
						++parent->_bf;
					}
					else 
					{
						--parent->_bf;
					}
					if (parent->_bf == 0)
					{
						break;
					}
					else if (abs(parent->_bf) == 1)
					{
						cur = parent;
						parent = parent->_parent;
					}
					else if (abs(parent->_bf) == 2)
					{
						if (parent->_bf == 2 && cur->_bf == 1)
						{
							RotateL(parent);
						}
						else if (parent->_bf == -2 && cur->_bf == -1)
						{
							RotateR(parent);
						}
						else if (parent->_bf == -2 && cur->_bf == 1)
						{
							RotateLR(parent);
						}
						else if (parent->_bf == 2 && cur->_bf == -1)
						{
							RotateRL(parent);
						}
						break;
					}
					else
					{
						std::cout << "AVL fail\n";
						assert(false);
					}
				}
				
				return true;
			}
		}
	private:
		void RotateLR(Node* parent)
		{
			Node* subL = parent->_left;
			Node* subLR = subL->_right;
			int bf = subLR->_bf;
			RotateL(subL);
			RotateR(parent);
			subLR->_bf = 0;
			if (bf == 1)
			{
				parent->_bf = 0;
				subL->_bf = -1;
			}
			else if (bf==-1)
			{
				parent->_bf = 1;
				subL->_bf = 0;
			}
			else if (bf == 0)
			{
				parent->_bf = 0;
				subL->_bf = 0;
			}
			else
			{
                printf("bf is fail!!\n");
				assert(false);
			}
		}

		void RotateRL(Node* parent)
		{
			Node* subR = parent->_right;
			Node* subRL=subR->_left;
			int bf = subRL->_bf;
			RotateR(subR);
			RotateL(parent);
			subRL->_bf = 0;
			if (bf == 1)
			{
				parent = -1;
				subR = 0;
			}
			else if(bf==-1)
			{
				parent = 0;
				subR = 1;
			}
			else if (bf == 0)
			{
				parent = 0;
				subR = 0;
			}
			else
			{
                printf("bf is fail!!\n");
				assert(false);
			}

		}
		void RotateL(Node* parent)
		{
			Node* subR = parent->_right;
			Node* subRL = subR->_left;
			
			parent->_right = subRL;
			if (subRL) 
			{
				subRL->_parent = parent;
			}
			Node* pparent = parent->_parent;

			parent->_parent = subR;
			subR->_left = parent;
			if (_root == parent)
			{
				_root = subR;
				subR->_parent == nullptr;
			}
			else
			{
				if (pparent->_left == parent)
				{
					pparent->_left = subR;
				}
				else
				{
					pparent->_right = subR;
				}
				subR->_parent = pparent;
			}
			subR->_bf = 0;
			parent->_bf = 0;
		}

		void RotateR(Node* parent)
		{
			Node* subL = parent->_right;
			Node* subLR = subL->_right;

			parent->_left = subLR;
			if (subLR)
			{
				subLR->_parent = parent;
			}
			Node* pparent = parent->_parent;

			parent->_parent = subL;
			subL->_right = parent;
			if (_root == parent)
			{
				_root = subL;
				subL->_parent == nullptr;
			}
			else
			{
				if (pparent->_left == parent)
				{
					pparent->_left = subL;
				}
				else
				{
					pparent->_right = subL;
				}
				subL->_parent = pparent;
			}
			subL->_bf = 0;
			parent->_bf = 0;
		}

		Node* _root;
	};
}

?謝謝!!文章來源地址http://www.zghlxwxcb.cn/news/detail-491502.html

到了這里,關(guān)于AVL樹原理以及插入代碼講解(插入操作畫圖~細節(jié))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領支付寶紅包贊助服務器費用

相關(guān)文章

  • STM32 OLED 顯示原理的講解以及OLED顯示漢字與圖片的代碼

    STM32 OLED 顯示原理的講解以及OLED顯示漢字與圖片的代碼

    本文主要涉及OLED顯示原理的講解以及OLED顯示漢字與圖片的代碼。 OLED,即有機發(fā)光二極管(Organic Light-Emitting Diode),又稱為有機電激光顯示(Organic Electroluminesence Display,OELD) 。 OLED由于同時具備自發(fā)光,不需背光源、對比度高、厚度薄、視角廣、反應速度快、可用于撓曲性面板

    2024年02月04日
    瀏覽(28)
  • 【AI 實戰(zhàn)】Text Processing and Word Embedding 文本處理以及詞嵌入原理和代碼實例講解

    【AI 實戰(zhàn)】Text Processing and Word Embedding 文本處理以及詞嵌入原理和代碼實例講解

    https://www.youtube.com/watch?v=6_2_2CPB97s 文本處理是自然語言處理(NLP)的一個重要部分,它涉及到將文本數(shù)據(jù)轉(zhuǎn)化為可以被機器學習算法理解的格式。這個過程通常包括以下步驟: 文本清洗:這是文本處理的第一步,主要是去除文本中的噪聲,如特殊字符、數(shù)字、標點符號等。

    2024年02月01日
    瀏覽(51)
  • 用通俗易懂的方式講解:一文講透主流大語言模型的技術(shù)原理細節(jié)

    用通俗易懂的方式講解:一文講透主流大語言模型的技術(shù)原理細節(jié)

    大家好,今天的文章分享三個方面的內(nèi)容: 1、比較 LLaMA、ChatGLM、Falcon 等大語言模型的細節(jié):tokenizer、位置編碼、Layer Normalization、激活函數(shù)等。 2、大語言模型的分布式訓練技術(shù):數(shù)據(jù)并行、張量模型并行、流水線并行、3D 并行、零冗余優(yōu)化器 ZeRO、CPU 卸載技術(shù) ZeRo-offload、

    2024年01月16日
    瀏覽(25)
  • C語言數(shù)據(jù)結(jié)構(gòu)(鏈表概念講解和插入操作)

    C語言數(shù)據(jù)結(jié)構(gòu)(鏈表概念講解和插入操作)

    本篇文章帶大家正式的來學習數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)結(jié)構(gòu)是學習操作系統(tǒng),和深入C語言必不可少的,所以這篇文章開始帶大家學習數(shù)據(jù)結(jié)構(gòu)的知識。 鏈表(Linked List)是一種常見的數(shù)據(jù)結(jié)構(gòu),用于存儲和組織數(shù)據(jù)元素。它由一系列節(jié)點(Node)組成,每個節(jié)點包含存儲的數(shù)據(jù)(或稱

    2024年02月06日
    瀏覽(24)
  • C++ AVL樹(四種旋轉(zhuǎn),插入)

    C++ AVL樹(四種旋轉(zhuǎn),插入)

    AVL樹又稱高度平衡二叉搜索樹,它的高度接近log[2]N(以2為底N的對數(shù)),整棵樹的形狀接近完全二叉樹 增刪查改的時間復雜度是O(log[2]N) 本節(jié)我們實現(xiàn)的是Key-Value模型的AVL樹 這里我們的AVL樹節(jié)點比起普通的二叉樹的節(jié)點來說多了兩個成員 第一個是平衡因子,這里我們定義的平衡因子

    2024年02月04日
    瀏覽(14)
  • [linux kernel]slub內(nèi)存管理分析(4) 細節(jié)操作以及安全加固

    前情回顧 關(guān)于slab幾個結(jié)構(gòu)體的關(guān)系和初始化和內(nèi)存分配的邏輯請見: [linux kernel]slub內(nèi)存管理分析(0) 導讀 [linux kernel]slub內(nèi)存管理分析(1) 結(jié)構(gòu)體 [linux kernel]slub內(nèi)存管理分析(2) 初始化 [linux kernel]slub內(nèi)存管理分析(2.5) slab重用 [linux kernel]slub內(nèi)存管理分析(3) kmalloc 描述方法約定

    2023年04月09日
    瀏覽(29)
  • 【數(shù)據(jù)結(jié)構(gòu)】AVL樹的插入與驗證

    【數(shù)據(jù)結(jié)構(gòu)】AVL樹的插入與驗證

    普通的二叉搜索樹在極端情況下會 退化成類似鏈表 的形狀,從而使 查找的效率降低至O(N) 。 在此基礎上,蘇聯(lián)與以色列數(shù)學家 A delson- V elskii 與 蘇聯(lián)數(shù)學家 L andis,發(fā)明出了 AVL樹或者說平衡二叉搜索樹。 注:第一張——Adelson-Velskii(1922-2014) ,第二張——Landis(1921——

    2024年02月09日
    瀏覽(17)
  • 堆的實現(xiàn),畫圖和代碼分析建堆,堆排序,時間復雜度以及TOP-K問題

    堆的實現(xiàn),畫圖和代碼分析建堆,堆排序,時間復雜度以及TOP-K問題

    如果有一個關(guān)鍵碼的集合K = {k 0 ,k 1 ,k 2 ,…,k n-1 },把它的所有元素按 完全二叉樹 的順序存儲方式存儲在一個一維數(shù)組中,并滿足:k i =k 2*i+1 且 =k 2*i+2 (k i =k 2*i+1 且 =k 2*i+2 ) i = 0,1,2…,則稱為小堆(或大堆)。將根節(jié)點最大的堆叫做最大堆或大根堆,根節(jié)點最小的堆叫

    2024年02月04日
    瀏覽(23)
  • 【手撕Transformer】Transformer輸入輸出細節(jié)以及代碼實現(xiàn)(pytorch)

    【手撕Transformer】Transformer輸入輸出細節(jié)以及代碼實現(xiàn)(pytorch)

    數(shù)據(jù)從輸入到encoder到decoder輸出這個過程中的流程(以機器翻譯為例子): 對于機器翻譯來說,一個樣本是由原始句子和翻譯后的句子組成的。比如原始句子是: “我愛機器學習”,那么翻譯后是 ’i love machine learning‘。 則該一個樣本就是由“我愛機器學習”和 “i love ma

    2023年04月22日
    瀏覽(21)
  • 【C++】AVL樹和紅黑樹的插入

    【C++】AVL樹和紅黑樹的插入

    時間過的好快,我也修煉到紅黑樹了 人世這一遭,何其短暫而漫長啊…… 1. 雖然二叉搜索樹的搜索效率很高,當搜索樹接近滿二叉樹時,搜索效率可以達到logN,但是如果數(shù)據(jù)是有序的,則二叉搜索樹會退化為單支樹,搜索效率和普通的序列式容器相同了就,所以在搜索樹的

    2023年04月08日
    瀏覽(25)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包