/*
把二叉查詢樹轉化為雙向鍊錶
什麼是二元查詢樹?
二元查詢樹: 它首先要是一棵二元樹,在這基礎上它或者是一棵空樹;或者是具有下列性質的二元樹:
(1)若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2)若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3)左、右子樹也分別為二元查詢樹
*/#include
using namespace std;
struct bstreenode
};typedef bstreenode doublelist;
doublelist *phead; //雙向鍊錶的頭部
doublelist *plistindex; //雙向鍊錶的索引
//建立二元查詢樹
void addnode(bstreenode * &pcurrent, int v)
else
else if (v > (pcurrent->value))
else}}
void addtodoublelist(bstreenode *pnode)
else
plistindex = pnode;
}//中序遍歷二元查詢數 順序訪問
void mid(bstreenode *pnode)
mid(pnode->left);
/// cout << pnode->value << " ";
addtodoublelist(pnode);
mid(pnode->right);
} void display(doublelist *plist)
cout << endl;
}int main()
for (int i = 0; i < n; i++)
mid(root); //通過中序遍歷把二叉查詢樹轉化為雙向鍊錶
display(phead); //輸出該雙向鍊錶 }}
/*6 2 4 1 9 10 5
1 2 4 5 9 10
*/
二元查詢樹變雙向鍊錶
宣告 取自 july 的 微軟100題 加上一些個人理解,歡迎拍磚。學習微軟100題筆記 1.二元查詢樹變雙向鍊錶 include include struct bstreenode typedef bstreenode doublelist doublelist phead doublelist ...
把二元查詢樹變成雙向鍊錶
輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。include struct bstreenode typedef bstreenode doublelist doublelist phead doublelist plistindex voi...
二叉搜尋樹轉化為雙向鍊錶
首先需要明白二叉搜尋樹也是一種排序的資料結構,它的中序遍歷就是乙個不遞減的順序排列 所以如果要轉換成乙個排序好的雙向鍊錶,那麼僅需要改變原來指向左子節點和右子節點的指標,讓他們分別指向前節點和後節點即可,如圖所示 調整指標 原先指向左子節點的指標調整為鍊錶中指向前乙個節點的指標 原先指向右子節點的指...