二叉排序樹轉化為雙向鍊錶

2021-06-23 06:10:23 字數 526 閱讀 9167

我們可以中序遍歷整棵樹。按照這個方式遍歷樹,比較小的結點先訪問。如果我們每訪問乙個結點,假設之前訪問過的結點已經調整成乙個排序雙向鍊錶,我們再把調整當前結點的指標將其鏈結到鍊錶的末尾。當所有結點都訪問過之後,整棵樹也就轉換成乙個排序雙向鍊錶了。

#include

using std::cin;

using std::cout;

using std::endl;

typedef struct bstnode

bstnode;

void convertnode(bstnode *bt,bstnode **lastnode)

temp->lchild = *lastnode;

if(*lastnode != null)

*lastnode = temp;

if(temp->rchild != null)

}bstnode *convert(bstnode *bt) //需要返回頭結點

return head;

}int main()

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

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

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

整個過程可以看做是三部分的鍊錶化,左子樹 根節點和右子樹。遞迴地對這三部分進行鍊錶化,在鍊錶化中處理好左子樹最右節點與根節點的鏈結關係 根節點與右子樹的關係,那麼整個過程就能夠完成。treenode convert treenode root void convertnode treenode no...

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

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