將二元查詢樹轉變為排序的雙向鍊錶

2021-06-16 05:44:23 字數 521 閱讀 1457

2011-04-25 20:52:50

例如:的二叉搜尋樹,求雙向鍊錶輸出:4=6=8=10=12=14=16

利用遞迴的特性不難寫出code:

下面是上述方法的改寫:

思考:1. 為什麼最後中序遍歷是4的迴圈列印?

2. 為什麼這個改寫方法不能在呼叫函式外面儲存頭結點,即phead為什麼無效?

3. 在調整指標指向的時候,只能修改root指標的left,而不能修改其right指標,否則將造成遞迴失敗。

任何演算法有遞迴解,就一定存在迭代演算法,下面是迭代解法,本質上是利用前序遍歷的迭代演算法求解:

node* reconstruct2(node *root)

node = nstack.top();

if (newroot == null)

else

node = node->right;

nstack.pop();

} return newroot;

}

二元查詢樹轉變成排序的雙向鍊錶

描述 輸入一顆二元查詢樹,將二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立人新建立的結點,只調整指標的指向。我的思路 利用遞迴思想進行解答。1.分解,將結點p分解成左子樹和右自樹兩個部分。2.解決子問題,左子樹變成乙個雙向鍊錶,右子樹變成乙個雙向鍊錶。3.合併,將結點p的left 連線到左子樹中最...

二元查詢樹轉變成排序的雙向鍊錶

把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排 序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。10 6 14 4 8 12 8 轉換成雙向鍊錶 4 6 8 10 12 14 16 利用中序遍歷來解決比較簡單,這裡我主要提供一種非遞迴版本來解決這個問題 遞迴版本 c...

把二元查詢樹轉變成排序的雙向鍊錶

1.首先是如何建立乙個二叉查詢樹 2.再對二叉查詢樹進轉換 如下 bstreenode1.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct bstreenode typedef bstreenode doubl...