二元查詢樹 轉化為雙向鍊錶

2021-06-09 04:45:00 字數 1080 閱讀 8213

/*

把二叉查詢樹轉化為雙向鍊錶 

什麼是二元查詢樹?

二元查詢樹: 它首先要是一棵二元樹,在這基礎上它或者是一棵空樹;或者是具有下列性質的二元樹: 

(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...

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

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