二叉搜尋樹轉化為雙向鍊錶

2022-08-02 19:06:10 字數 749 閱讀 1361

整個過程可以看做是三部分的鍊錶化,左子樹、根節點和右子樹。

遞迴地對這三部分進行鍊錶化,在鍊錶化中處理好左子樹最右節點與根節點的鏈結關係、根節點與右子樹的關係,那麼整個過程就能夠完成。

**treenode * convert(treenode * root)

void convertnode(treenode * node, treenode = lastnodeinlist)

if(node == null) return ;

treenode * current = node; //記住,此時node 與current相當

if(current->left != null)

convertnode(current->letf,lastnodeinlist); //遞迴地呼叫此函式進行鍊錶修改

current->left = lastnodeinlist; //修改指標 current指向前一部分的最右(最大元素)

if(lastnodeinlist !=null)lastnodeinlist->right = current;//修改指標,前一部分最右元素指向current

lastnodeinlist = current;//左邊部分鏈結完畢,最右元素lastnodeinlist為current,

if(current->right != null)

convertnode(current->right,lastnodeinlist);

總結: 要了解遞迴,首先得了解遞迴。

二叉搜尋樹轉化為雙向鍊錶

首先需要明白二叉搜尋樹也是一種排序的資料結構,它的中序遍歷就是乙個不遞減的順序排列 所以如果要轉換成乙個排序好的雙向鍊錶,那麼僅需要改變原來指向左子節點和右子節點的指標,讓他們分別指向前節點和後節點即可,如圖所示 調整指標 原先指向左子節點的指標調整為鍊錶中指向前乙個節點的指標 原先指向右子節點的指...

將二叉搜尋樹轉化為雙向鍊錶

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。建立的雙向鍊錶的順序就是二叉搜尋樹的中序遍歷結果。這裡有遞迴和非遞迴解法。一般的非遞迴解法需要開闢額外的空間,本次借助morris演算法,給出一種不需要額外空間開銷的非遞迴解法。首先是遞...

二叉搜尋樹轉化為雙向鍊錶 js版本

leetcode原題 劍指 offer 36 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的迴圈雙向鍊錶。要求不能建立任何新的節點,只能調整樹中節點指標的指向。我們希望將這個二叉搜尋樹轉化為雙向迴圈鍊錶。鍊錶中的每個節點都有乙個前驅和後繼指標。對於雙向迴圈鍊錶,第乙個節點的前驅是最後乙個節點,最...