將二叉搜尋樹轉換成排序的雙向鍊錶

2021-10-07 23:14:45 字數 695 閱讀 3208

二叉搜尋樹的中序遍歷得到的是乙個已排序的序列。因此可以仿照中序遍歷,依次訪問結點並改變結點的指向,使其構成乙個雙向鍊錶。在訪問當前結點之前,需要先訪問左子樹,並改變左子樹中的結點指向,使其構成雙向鍊錶。同時需要獲取左子樹構成雙向鍊錶的頭和尾結點。頭結點是整棵樹構成的雙向鍊錶的頭結點,而尾結點是左子樹中最後乙個訪問的結點,用於和根結點連線。然後訪問右子樹,獲取右子樹鍊錶的頭結點和尾結點,頭結點用於連線當前結點和右子樹鍊錶。所以執行的邏輯是:

1.若根節點為空,直接返回

2.根節點不為空,且左子樹存在,先訪問左子樹,並獲取左子樹鍊錶的頭結點和尾結點,左子樹的頭結點即為整棵樹構成鍊錶的頭結點,將左子樹尾結點和根節點連線。

3.若左子樹不存在,根就是鍊錶的頭結點

4.若右子樹存在,訪問右子樹,獲取到右子樹鍊錶的頭結點。將根節點和右子樹的頭結點連線。

5.若右子樹不存在,則根節點即為尾結點。

treenode*

_convert

(treenode* root, treenode*

* last)

else

if(root-

>right)

else

return head;

} treenode*

convert

(treenode* prootoftree)

二叉搜尋樹轉換成排序雙向鍊錶

因為二叉樹中,每個結點都有兩個指向子節點的指標。在雙向鍊錶中也有兩個指標,它們分別指向前乙個和後乙個結點。由於這兩種結點的結構相似,同時二叉搜尋樹也是一種排序的資料結構,因此在理論上可能實現二叉搜尋樹和排序鍊錶的雙向鍊錶的轉換。在搜尋二叉樹中,左子節點的值總小於父節點的值,右子節點的值總是大於父節點...

二叉樹搜尋樹轉換成排序雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。先簡單說一說二叉搜尋樹,二叉搜尋樹有乙個特點 根大於左子樹,小於右子樹。二叉搜尋樹的中序遍歷是有序的序列。如下的一棵搜尋二叉樹 轉換成有序雙向鍊錶就要對搜尋二叉樹進行中序遍歷 ...

二叉樹搜尋樹轉換成排序雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。void convert treenode root,treenode prev convert root left,prev root left prev if prev 一開始不需要...