二元查詢樹變雙向鍊錶

2022-01-22 11:35:19 字數 1159 閱讀 1663

宣告:取自 」july「的「微軟100題「,加上一些個人理解,歡迎拍磚。

學習微軟100題筆記:

1.二元查詢樹變雙向鍊錶:

#include

#include

struct bstreenode

;typedef bstreenode doublelist;

doublelist * phead;

doublelist * plistindex;

void converttodoublelist(bstreenode * pcurrent);

bstreenode* addbstreenode(bstreenode * & pcurrent, int value)

else if( pcurrent->m_nvalue > value )

else if ( pcurrent->m_nvalue< value )

else

return pcurrent;

}void ergodicbstree( bstreenode *pcurrent )

if( null != pcurrent->m_pleft )

void converttodoublelist( bstreenode *pcurrent )

else

plistindex = pcurrent;

std::cout << pcurrent->m_nvalue << std::endl;

}int

main( void )

其中建立二叉樹時是按照 c語言程式設計中(k&r)方法建立的,大同小異。

重點是利用遞迴轉換為鍊錶的過程。

乙個全域性指標plistindex指向pcurrent的前乙個節點,每次呼叫converttodoublelist完成

pcurrent->m_pright -> plistindex;因為這裡pcurrent不為null,然後再plistindex->m_plift 指向當前pcurrent

要先判斷plistindex是否為null,因為plistindex開始時是賦值為null的,不能進行解引用操作。

新手沒經驗,歡迎指正錯誤,待更新。詳細請見開頭原博文 ,july大神。

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

把二叉查詢樹轉化為雙向鍊錶 什麼是二元查詢樹?二元查詢樹 它首先要是一棵二元樹,在這基礎上它或者是一棵空樹 或者是具有下列性質的二元樹 1 若左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 2 若右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 3 左 右子樹也分別為二元查詢樹 inc...

把二元查詢樹變成雙向鍊錶

輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。include struct bstreenode typedef bstreenode doublelist doublelist phead doublelist plistindex voi...

二元查詢樹變雙鏈表

用最簡單的方法做 輸入一顆二元查詢樹,講該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只調整指標方向。include iostream include vector struct bstreenode void convertnode bstreenode tree,std vec...