二叉搜索樹和雙向鏈表

輸入一棵二叉搜索樹,將該二叉搜索樹轉(zhuǎn)換成一個(gè)排序的雙向鏈表。要求不能創(chuàng)建任何新的結(jié)點(diǎn),只能調(diào)整樹中結(jié)點(diǎn)指針的指向。

二叉樹可以轉(zhuǎn)換為雙向鏈表,對(duì)于一個(gè)節(jié)點(diǎn)來(lái)說(shuō)右左右兩個(gè)指針,對(duì)于右n個(gè)節(jié)點(diǎn)的二叉樹來(lái)說(shuō)一共有2n個(gè)指針,對(duì)于n個(gè)節(jié)點(diǎn)的雙向鏈表存在的指針的數(shù)量是中間的2(n-1)加上頭尾指針也是2*n個(gè),所以一定可以通過(guò)某種方式將二叉樹轉(zhuǎn)化為雙向鏈表。轉(zhuǎn)換為雙向鏈表的可以增加訪問速度,二叉樹的前中后遍歷一般采用遞歸的方式進(jìn)行,如果樹比較龐大尤其是深度比較大的時(shí)候耗費(fèi)的空間比較多。如果每次訪問都按照遞歸方式調(diào)用是非常不合理的,簡(jiǎn)單的排序二叉樹 {2,1,3},其中1,3分別是2的左右節(jié)點(diǎn),這個(gè)二叉樹的中序遍歷是 1,2,3。如果將節(jié)點(diǎn)1的right指針指向后繼節(jié)點(diǎn)2,2的right指針指向后繼節(jié)點(diǎn)3,三個(gè)節(jié)點(diǎn)的left指針指向前驅(qū)節(jié)點(diǎn)就可以轉(zhuǎn)換成雙向鏈表了,以后中序遍歷的時(shí)候就可以直接訪問這個(gè)雙向鏈表就可以了,所以在原來(lái)樹的結(jié)構(gòu)上再增加兩個(gè)方向指針,代替上面的兩個(gè)指針指向的前驅(qū)和后繼,許多書上將類似的操作成為 二叉樹的線索化。

二叉搜索樹的特點(diǎn)是左邊小于中間小于右邊,得到排序的雙向鏈表就是將中序遍歷線索化,一個(gè)非常簡(jiǎn)單的實(shí)現(xiàn)方式就是將中序遍歷中的節(jié)點(diǎn)依次放在全局?jǐn)?shù)組中,然后遍歷數(shù)組,然后將數(shù)組的相鄰元素用right指針連接后面的,用left指針連接前面的就能達(dá)到目的,代碼如下。

$nodes = array();
function Convert($pRootOfTree)
{
    // write code here
    GLOBAL $nodes;
    $nodes = array();
    inorder($pRootOfTree);
    for($i = 0;$i<count($nodes)-1;$i++){
        $nodes[$i]->right = $nodes[$i+1];
        $nodes[$i+1]->left = $nodes[$i];
    }
    return $nodes[0];
}
function inorder($Root){
    GLOBAL $nodes;
    if($Root==null){
        return;
    }else{
        inorder($Root->left);
        $nodes[] = $Root;
        inorder($Root->right);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 樹的概述 樹是一種非常常用的數(shù)據(jù)結(jié)構(gòu),樹與前面介紹的線性表,棧,隊(duì)列等線性結(jié)構(gòu)不同,樹是一種非線性結(jié)構(gòu) 1.樹的定...
    Jack921閱讀 4,773評(píng)論 1 31
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學(xué)在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,388評(píng)論 0 12
  • 四、樹與二叉樹 1. 二叉樹的順序存儲(chǔ)結(jié)構(gòu) 二叉樹的順序存儲(chǔ)就是用數(shù)組存儲(chǔ)二叉樹。二叉樹的每個(gè)結(jié)點(diǎn)在順序存儲(chǔ)中都有...
    MinoyJet閱讀 1,744評(píng)論 0 7
  • 二叉樹的定義#### 二叉樹是n(n>=0)個(gè)具有相同類型的元素的有限集合,當(dāng)n=0時(shí)稱為空二叉樹,當(dāng)n>0時(shí),數(shù)...
    kylinxiang閱讀 1,602評(píng)論 0 2
  • 原鏈接:理解線索二叉樹|CloudWong 線索二叉樹原理 遍歷二叉樹的其實(shí)就是以一定規(guī)則將二叉樹中的結(jié)點(diǎn)排列成一...
    簡(jiǎn)Cloud閱讀 8,563評(píng)論 1 16

友情鏈接更多精彩內(nèi)容