題目:輸入一棵二叉搜尋樹(即二叉排序樹),將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整書中節點指標的指向。
分析:
對於下圖這樣一棵二叉排序樹來講,轉換成右邊的排序的雙向鍊錶,我們考慮到二叉排序樹的中序遍歷是一種有序的結果,所以我們使用中序遍歷,然後在遍歷的過程中修改子樹的節點指標指向,以達到目的。
因為當中序遍歷這棵二叉樹的時候,節點8的下乙個節點是10,節點10的下乙個節點是12,所以我們把節點10的左子樹指標指向前乙個節點8,其右子樹指標指向後乙個節點12.
針對該二叉樹的**如下:
package problem2;
/** *@author hutongling
* *@time:2023年3月22日 上午11:31:07
*/public
class 二叉搜尋樹轉換成有序雙向鍊錶
private
static treenode convertnode(treenode node, treenode lastnodeinlist)
public
static
void
main(string args) }}
遍歷的結果為:4 6 8 10 12 14
結果符合題目的要求。
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...