輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
考慮不能建立結點,不能輔助空間。使用遞迴,輸出順序為中序遍歷順序。使用乙個輔助指標記錄當前結點的上乙個結點,從左子樹開始調整。
7
/ \ 5
10/ \ / \
36812 \ \ /49
11
輸入:通過前序和中序確定一棵搜尋二叉樹:
前序: 7,5,3,4,6,10,8,9,12,11
中序: 3,4,5,6,7,8,9,10,11,12
輸出:
鍊錶元素從頭(小)到尾(大)的順序分別為:
3 4 5 6 7 8 9 10 11 12
#include
#include
using namespace std;
struct treenode};
class
solution
void printmidoderauxiliary
(treenode
* current,
treenode
*&pre)
// 利用前序和中序序列新建一棵樹用來測試
treenode
*createtree
(vector pre, vector mid)
private
:treenode
*createtree
(vector pre, int pre_start, int pre_end, vector mid, int mid_start, int mid_end)
}return root;}}
;int main()
; vector mid =
; root = re.
createtree
(pre,mid);if
(!root)
return1;
treenode
* result = re.
printmidoder
(root)
; cout <
<
"鍊錶元素從頭(小)到尾(大)的順序分別為: "
<
< endl;
while
(result)
cout <
< endl;
}
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...