線索二叉樹它解決了無(wú)法直接找到該結(jié)點(diǎn)在某種遍歷序列中的前趨和后繼結(jié)點(diǎn)的問題,出現(xiàn)了二叉鏈表找左、右孩子困難的問題,線索二叉樹又分為前序線索化,中序線索化和后序線索化,分別用不同的邏輯去實(shí)現(xiàn)。
線索二叉樹的實(shí)現(xiàn)思想:借用一個(gè)枚舉類型tag其中包含兩個(gè)狀態(tài)Link(代表有數(shù)據(jù)),thread(代表下一個(gè)節(jié)點(diǎn)為空)在一個(gè)節(jié)點(diǎn)的左節(jié)點(diǎn)或者右節(jié)點(diǎn)為空的情況下,將它的left或right設(shè)為thread,則它的左或右訪問的是改遍歷模式下訪問到的下一個(gè)節(jié)點(diǎn)數(shù)據(jù),這樣就完成了跳到另一顆子樹的過程,減少了遞歸的次數(shù)。
先序線索化
void _PrevorderThreading(BinaryTreeXsh*cur, BinaryTreeXsh *&prev) { if (cur == NULL) { return; } if (cur->_leftnode==NULL) { cur->_LeftTag=THREAD; cur->_leftnode=prev; } if (prev&&prev->_rightnode==NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; if (cur->_LeftTag == LINK) { _PrevorderThreading(cur->_leftnode, prev); } if (cur->_RightTag == LINK) { _PrevorderThreading(cur->_rightnode, prev); } }
中序線索化
void _InorderThreading(BinaryTreeXsh* root, BinaryTreeXsh *&prev) { BinaryTreeXsh *cur = root; if (cur == NULL) { return; } _InorderThreading(cur->_leftnode, prev); if (cur->_leftnode == NULL) { cur->_LeftTag = THREAD; cur->_leftnode = prev; } if (prev&&prev->_rightnode == NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; _InorderThreading(cur->_rightnode, prev); }
后序線索化
void _PostorderThreading(BinaryTreeXsh*root, BinaryTreeXsh *&prev) { BinaryTreeXsh *cur = root; if (cur == NULL) { return; } _PostorderThreading(cur->_leftnode, prev); _PostorderThreading(cur->_rightnode, prev); if (cur->_leftnode==NULL) { cur->_LeftTag = THREAD; cur->_leftnode = prev; } if (prev&&prev->_rightnode == NULL) { prev->_RightTag = THREAD; prev->_rightnode = cur; } prev = cur; }
另外有需要云服務(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)景需求。