線索二叉樹(shù)-創(chuàng)新互聯(lián)

用二叉樹(shù)作為存儲(chǔ)結(jié)構(gòu)時(shí),取到一個(gè)節(jié)點(diǎn),只能獲取節(jié)點(diǎn)的左孩子和右孩子,不能直接得到節(jié)點(diǎn)的任一遍歷序列的前驅(qū)或者后繼。但是常常我們會(huì)想要更加直觀的知道節(jié)點(diǎn)的前驅(qū)后繼。線索二叉樹(shù)顯得尤為的重要。

成都創(chuàng)新互聯(lián)公司長(zhǎng)期為成百上千客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為汝陽(yáng)企業(yè)提供專業(yè)的成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè),汝陽(yáng)網(wǎng)站改版等技術(shù)服務(wù)。擁有十余年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。

線索二叉樹(shù)

 線索二叉樹(shù)的關(guān)鍵就是要定義一個(gè)全局變量來(lái)存放上一個(gè)訪問(wèn)過(guò)的結(jié)點(diǎn)。

 Node* prev;

(一)前序線索二叉樹(shù)

線索二叉樹(shù)

	void PrevOrderTag()
	{
		_PrevOrderTag(_root);
	}
	void _PrevOrderTag(Node* root)//前序線索二叉樹(shù)
	{
		if (root == NULL)
			return;
		if (!root->_left)
		{
			root->_leftTag = THREAD;
			root->_left = prev;
		}
		if (prev && !prev->_right)
		{
			prev->_rightTag = THREAD;
			prev->_right = root;
		}
		prev = root;
		if (root->_leftTag == LINK)//只有當(dāng)_leftTag為L(zhǎng)INK時(shí)遞歸修改前驅(qū)后繼
			_PrevOrderTag(root->_left);
		if (root->_rightTag == LINK)
			_PrevOrderTag(root->_right);
	}
	void PrevOrderTagPrint()//前序線索化打印
	{
		Node* cur = _root;
		//while (cur)
		//{
		//	while (cur->_leftTag == LINK)
		//	{
		//		cout << cur->_data << " ";
		//		cur = cur->_left;
		//	}
		//	cout << cur->_data << " ";
		//	cur = cur->_right;
		//}
	//2.
		while (cur)
		{
			cout << cur->_data << " ";
			if (cur->_leftTag == LINK)
			{
				cur = cur->_left;
			}
			else
			{
				cur = cur->_right;
			}
		}
	}

  使用二叉樹(shù)的線索打印二叉樹(shù)是比較方便的,不用遞歸就能解決問(wèn)題。只要cur不為NULL就一直尋找后繼打印。

(二)中序線索二叉樹(shù)

線索二叉樹(shù)

	void MidOrderTag()
	{
		_MidOrderTag(_root);
	}
	void _MidOrderTag(Node* root)//中序線索二叉樹(shù)
	{
		if (root == NULL)
		{
			return;
		}
		if (root->_leftTag == LINK)//只有當(dāng)_leftTag為L(zhǎng)INK時(shí)遞歸修改前驅(qū)后繼
		    _MidOrderTag(root->_left);
		    
		    
		    
		if (!root->_left)
		{
			root->_leftTag = THREAD;
			root->_left = prev;
		}
		if (prev&&!prev->_right)
		{
			prev->_rightTag = THREAD;
			prev->_right = root;
		}
		prev = root;
		
		
		
		if (root->_rightTag == LINK)
		    _MidOrderTag(root->_right);
	}
	void MidOrderTagPrint()//中序線索打印
	{
		Node* cur = _root;
		while (cur)
		{
			while (cur->_leftTag == LINK)
			{
				cur = cur->_left;
			}
			cout << cur->_data << " ";
			while (cur->_rightTag == THREAD)
			{
				cur = cur->_right;
				cout << cur->_data << " ";
			}
			cur = cur->_right;//在打印右子樹(shù)之前一定保證左子樹(shù)已經(jīng)打印過(guò)了
		}
		cout << endl;
	}

 前序的線索化打印不難懂,但是中序得知道什么時(shí)候訪問(wèn)右結(jié)點(diǎn),在訪問(wèn)了左節(jié)點(diǎn)后才能訪問(wèn)右節(jié)點(diǎn)。

(三)后序線索二叉樹(shù)

線索二叉樹(shù)

	void RearOrderTag()
	{
		_RearOrderTag(_root);
	}
	void _RearOrderTag(Node* root)//后序線索二叉樹(shù)
	{
		if (root == NULL)
		{
			return;
		}
		if (root->_leftTag == LINK)//只有當(dāng)_leftTag為L(zhǎng)INK時(shí)遞歸修改前驅(qū)后繼
		    _RearOrderTag(root->_left);
		if (root->_rightTag == LINK)
		    _RearOrderTag(root->_right);
		    
		    
		    
		    
		if (!root->_left)
		{
			root->_leftTag = THREAD;
			root->_left = prev;
		}
		if (prev&&!prev->_right)
		{
			prev->_rightTag = THREAD;
			prev->_right = root;
		}
		prev = root;
	}

  注意,線索二叉樹(shù)只有當(dāng)tag的類型為L(zhǎng)INK時(shí)才修改結(jié)點(diǎn)的前驅(qū)和后繼

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

分享標(biāo)題:線索二叉樹(shù)-創(chuàng)新互聯(lián)
URL網(wǎng)址:http://www.muchs.cn/article6/dcdcig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名小程序開(kāi)發(fā)、定制網(wǎng)站、網(wǎng)站維護(hù)、微信小程序、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司