輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
比如將二元查詢樹
10/ \
6 14
/ \ / \
4 8 12 16
轉換成雙向鍊錶
4=6=8=10=12=14=16。
首先,我們知道:在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個結點也有兩個指標,它們分別指向前乙個結點和後乙個結點。
其次,由於要求轉換之後的鍊錶是排好序的,我們可以中序遍歷樹中的每乙個結點,這是因為中序遍歷演算法的特點是按照從小到大的順序遍歷二叉樹的每乙個結點。
最後,按照中序遍歷的順序,當我們遍歷轉換到根結點(值為10的結點)時,它的左子樹已經轉換成乙個排序的鍊錶了,並且處在鍊錶中的最後乙個結點是當前值最大的結點。我們把值為8的結點和根結點鏈結起來,此時鍊錶中的最後乙個結點就是10了。接著我們去遍歷轉換右子樹,並把根結點和右子樹中最小的結點鏈結起來。
很明顯,轉換它的左子樹和右子樹,由於遍歷和轉換過程是一樣的,很自然地想到可以用遞迴。
寫遞迴程式最
劍指offer系列26之二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路一 非遞迴法 非遞迴法主要利用了二叉樹的中序遍歷的非遞迴方法。python實現 coding utf 8 class treenode def init self,x self.va...
劍指offer JZ26二叉搜尋樹與雙向鍊錶
時間限制 c c 1秒,其他語言2秒 空間限制 c c 32m,其他語言64m 熱度指數 458676 本題知識點 鍊錶 樹 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。function treenode x function c...
劍指offer JZ26 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 二叉搜尋樹 bst 若二叉搜尋樹根節點的左子樹不為空,則根節點的左子樹所有節點值均小於根節點值,若根節點的右子樹不為空,則根節點的右子樹所有節點值均大於根節點 二叉搜尋樹的中序遍歷...