寫過程式的人都知道,每個程式執行的效率以及使用的記憶體空間都大不相同,即便他們的目的相同,為什麼呢?原因就在於如何存取資料,以及怎麼取得資料!想像你是一個儲貨中心的老闆,你要怎麼去加速員工取貨與存貨的速度?或許你會設計不同的空間,或許你會將貨物分門別類!這些都是方法。在這場鐵人賽中,我會分享如何用C++管理程式中的資料,換句話說,用C++建造出不同的儲物空間,而在程式設計中,這門學問就叫做「資料結構」。
新增節點的方式大概可以以兩種方式來概括: 非遞迴形式:void BST::insert(int); 相對直觀 使用 while 迴圈 遞迴形式:void...
想輸出鏈結串列其實很容易,只要找到當前節點的 next 即可找到下一個節點。有了節點,我們就可以輸出節點中的資料。這個是之前介紹過的 LinkedList::p...
上一篇文章,我們對三種遍歷法都有一定的認識了,今天我們要練習用迴圈來實作,難度會深一點! 我們都知道在遍歷一棵樹時,會遇到無數的岔路,那你有想過要怎麼紀錄岔路嗎...
今天要來完成第四種遍歷法:Level Order Traversal 比起前三者來說,他顯得更加直觀,因為他是按照 level 大小來輸出資料,換句話說,就是由...
今日目標: BST::getMax() BST::getMin() BST::search(int tg) (註:tg 為 target 的縮寫)...
刪除節點一向都是比較困難的,我們要去注意 根節點是不是我們要去刪除的目標節點 如何連接目標節點的父節點與子節點 如果目標節點有兩個子節點,又該如何與父節點連接...
今天我們要完成以下的狀況: 目標節點(BSTNode *tg)可以分成三種狀況: tg == NULL : 目標不存在 tg == this -> ro...
在二元搜尋樹中,有這麼一個經典的題目:尋找兩節點的共同祖先! 但是共同祖先可以有很多個,所以我們會選擇最接近的共同祖先作為這題的輸出。 那要怎麼實作呢? 我們...
學了二元搜尋樹的基本,那想過怎麼判斷這棵樹是不是二元搜尋樹嗎? 還記得有一個遍歷演算法叫做「中序遍歷」或 inorder traversal 嗎?用這個遍歷法...
30 天的時間,我分享了資料結構的入門,從最根本的指標開始,到進階的鏈結串列,再到二元搜尋樹。 我覺得最困難的部分大概就是指標了吧!因為鏈結串列、二元樹都是基於...