面試題36 二叉搜尋樹與雙向鍊錶(分治)(遞迴)

2021-10-02 19:45:54 字數 1040 閱讀 9399

題目:

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。

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

我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,最後乙個節點的後繼是第乙個節點。

下圖展示了上面的二叉搜尋樹轉化成的鍊錶。「head」 表示指向鍊錶中有最小元素的節點。

特別地,我們希望可以就地完成轉換操作。當轉化完成以後,樹中節點的左指標需要指向前驅,樹中節點的右指標需要指向後繼。還需要返回鍊錶中的第乙個節點的指標。

思路:中序遍歷整棵樹,分為三部分,左子樹變成的鍊錶,右子樹變成的鍊錶,與中間節點,合併即可。

唯一需要注意的是,合併時候節點不要混淆。

**:

class

solution

if(root.left == null&&root.right == null)

node rootl =

treetodoublylist

(root.left)

; node rootr =

treetodoublylist

(root.right);if

(rootl!=null&&rootr!=null)

else

if(rootl == null)

else

}}

面試題36 二叉搜尋樹與雙向鍊錶

面試題36 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。調整指標 原先指向左子節點的指標調整為鍊錶中指向前乙個節點的指標 原先指向右子節點的指標調整為鍊錶中指向後乙個節點的指標 如何調整 考慮根節點和左右子樹的根本情況,因為如果用...

面試題36 二叉搜尋樹與雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。為了讓您更好地理解問題,以下面的二叉搜尋樹為例 我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,...

面試題24 二叉搜尋樹與雙向鍊錶

分析 1.二叉樹中,每個結點都有兩個指向子結點的指標。2.在雙向鍊錶中,每個結點也有兩個指標,分別指向前乙個結點和後乙個結點 3.二叉搜尋樹中,左子結點的值總是小於父結點的值,右子結點的值總是大於父結點的值。4.將二叉搜尋樹轉換為雙向鍊錶時,原先指向左子結點的指標調整為鍊錶中指向前乙個結點的指標,原...