輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
由於二叉樹的中序遍歷具有可以實現遞增的功能,同時二叉樹的每乙個節點都有兩個指標,左指標和右指標,因此我們可以用這些特點將二叉樹轉換成乙個雙向鍊錶,每次在遞迴遍歷的時候設定乙個pre,記錄中序遍歷時當前節點的前節點,然後將當前節點的左指標指向pre節點,然後如果pre節點不為空則將pre的右節點指向當前節點,由此就形成了乙個雙向鍊錶的前後指標。每次遞迴重複這兩步,則可以形成乙個完整的雙向鍊錶。
最後一步就是雙向鍊錶已經構建完成了,而題目要求返回雙向鍊錶,則從原二叉樹的root節點往前遍歷找到雙向鍊錶的頭返回即可.
注意:**中設定了乙個只有乙個空間的陣列來儲存pre節點。
public
class solution
private
void
helper(treenode node,treenode pre)
}
二叉搜尋樹和雙向鍊錶
參考 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。分析 題中要求輸出排序的雙向鍊錶,因為在二叉搜尋樹的中序遍歷是遞增的,所以想到使用中序遍歷的方式從小到大逐個找到每個節點,然後建立雙向鍊錶。過程中有乙個小細節,就是建立雙向鍊錶完後...
劍指offer 二叉搜尋樹和雙向鍊錶
題目 輸入乙個複雜鍊錶 每個節點中有節點值,以及兩個指標,乙個指向下乙個節點,另乙個特殊指標指向任意乙個節點 返回結果為複製後複雜鍊錶的head。注意,輸出結果中請不要返回引數中的節點引用,否則判題程式會直接返回空 解答 利用二叉樹的中序遍歷,找到第乙個訪問的結點 利用標誌位first 用head記...
劍指offer 二叉搜尋樹和雙向鍊錶
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個結點也有兩個指標,它們分別指向前乙個結點和後乙個結點。由於這兩種結點的結構相似,同時二叉搜尋樹也是一種排序...