五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

算法:二叉搜索樹與雙向鏈表

2022-09-27 14:05 作者:做架構(gòu)師不做框架師  | 我要投稿


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


為了讓您更好地理解問題,以下面的二叉搜索樹為例:

我們希望將這個二叉搜索樹轉(zhuǎn)化為雙向循環(huán)鏈表。鏈表中的每個節(jié)點都有一個前驅(qū)和后繼指針。對于雙向循環(huán)鏈表,第一個節(jié)點的前驅(qū)是最后一個節(jié)點,最后一個節(jié)點的后繼是第一個節(jié)點。


下圖展示了上面的二叉搜索樹轉(zhuǎn)化成的鏈表。“head” 表示指向鏈表中有最小元素的節(jié)點。

特別地,我們希望可以就地完成轉(zhuǎn)換操作。當(dāng)轉(zhuǎn)化完成以后,樹中節(jié)點的左指針需要指向前驅(qū),樹中節(jié)點的右指針需要指向后繼。還需要返回鏈表中的第一個節(jié)點的指針。


方法:中序遍歷

算法解析:

  • 初始化兩個節(jié)點,分別 pre(前驅(qū)節(jié)點)、head(頭節(jié)點);

  • 如果 root 節(jié)點為空,直接返回;

  • 遞歸中序遍歷轉(zhuǎn)化為雙向鏈表:

    • 如果當(dāng)前節(jié)點為空,直接返回;

    • 按照中序遍歷的規(guī)則,遞歸左子樹;

    • 如果前驅(qū)節(jié)點為空,說明是頭節(jié)點,頭節(jié)點即為當(dāng)前節(jié)點;當(dāng)前驅(qū)節(jié)點非空,修改雙向節(jié)點的引用,前驅(qū)節(jié)點的右子節(jié)點指向當(dāng)前節(jié)點;當(dāng)前節(jié)點的左子節(jié)點指向前驅(qū)節(jié)點;

    • 更新前驅(qū)節(jié)點等于當(dāng)前節(jié)點,這樣當(dāng)前節(jié)點時下一個節(jié)點的前驅(qū)節(jié)點了;

    • 按照中序遍歷的規(guī)則,遞歸右子樹。

  • 遞歸完畢后,把頭節(jié)點的左子節(jié)點指向前驅(qū)節(jié)點;前驅(qū)節(jié)點的右子節(jié)點指向頭節(jié)點;

  • 返回鏈表的頭節(jié)點。


代碼如下:

復(fù)雜度分析

  • 時間復(fù)雜度:O(N),N 為二叉樹的節(jié)點數(shù),中序遍歷需要訪問所有節(jié)點。

  • 空間復(fù)雜度:O(N),最差情況下,即樹退化為鏈表時,遞歸深度達到 N,系統(tǒng)使用 O(N) 棧空間。

END

書山有路勤為徑,學(xué)海無涯苦作舟,贈友人。

好兄弟可以點贊并關(guān)注我的公眾號“javaAnswer”,全部都是干貨。


算法:二叉搜索樹與雙向鏈表的評論 (共 條)

分享到微博請遵守國家法律
洪江市| 鄂托克前旗| 班戈县| 图片| 江永县| 永春县| 黔东| 秦皇岛市| 芒康县| 东港市| 大新县| 同心县| 襄汾县| 苏州市| 喀喇| 买车| 察哈| 博乐市| 贡山| 油尖旺区| 新营市| 门头沟区| 成武县| 鹤峰县| 南漳县| 台东县| 浦东新区| 贡山| 琼中| 南溪县| 卢氏县| 明水县| 威信县| 綦江县| 即墨市| 禄丰县| 祁东县| 绥棱县| 泽州县| 广安市| 渝中区|