要求:輸入棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整樹種結點指標的指向。
具體見劍指offer題27。
分析:在二叉樹中,每個節點都有兩個指向子節點的指標。而在雙向鍊錶中,每乙個節點也有兩個指標,分別指向向前和後向的節點。因此這兩種資料結構有相似之處,並且二叉搜尋樹是一種排序的資料結構,可以轉換為排序的雙向鍊錶。
主要思想:將原先指向左子節點的指標調整為鍊錶中指向前乙個節點的指標,原先指向右子節點的指標調整為鍊錶中指向後乙個節點的指標。
使用中序遍歷二叉搜尋樹,這樣遍歷的資料正好是按大小順序排列的。我們把樹看成三部分:值為10的節點,根節點值為6的左子樹,和根節點為14的右子樹。將左右子樹轉換為排序的雙向鍊錶之後再和根節點鏈結起來,就能完成題目要求。很明顯要用遞迴。
剛開始看的話還是比較繞的,慢慢看的話會體會到其中的巧妙。
主**:
binarytreenode* convert(binarytreenode* prootoftree)
void convertnode(b* pnode, b** plastnodeinlist)
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...