題目描述
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
先簡單說一說二叉搜尋樹,二叉搜尋樹有乙個特點:根大於左子樹,小於右子樹。二叉搜尋樹的中序遍歷是有序的序列。
如下的一棵搜尋二叉樹:
轉換成有序雙向鍊錶就要對搜尋二叉樹進行中序遍歷
雙向鍊錶結點的prev可以理解成二叉樹的left,next理解成right。
中序遍歷的時候需要prev對上乙個結點記錄
void
_convert
(treenode* root, treenode*
&prev)
treenode*
convert
(treenode* prootoftree)
return head;
}
二叉樹搜尋樹轉換成排序雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。void convert treenode root,treenode prev convert root left,prev root left prev if prev 一開始不需要...
二叉搜尋樹轉換成排序雙向鍊錶
因為二叉樹中,每個結點都有兩個指向子節點的指標。在雙向鍊錶中也有兩個指標,它們分別指向前乙個和後乙個結點。由於這兩種結點的結構相似,同時二叉搜尋樹也是一種排序的資料結構,因此在理論上可能實現二叉搜尋樹和排序鍊錶的雙向鍊錶的轉換。在搜尋二叉樹中,左子節點的值總小於父節點的值,右子節點的值總是大於父節點...
二叉搜尋樹轉換成雙向鍊錶
問 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。public class treenode public class solution 如果已經遍歷到葉子節點,則將最後的節點轉變成葉子節點 if prootoftree.left ...