宣告:取自 」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...