iT邦幫忙

2025 iThome 鐵人賽

DAY 27
0

「原來 Tree 的應用範圍比我想像的還要廣啊!」我忍不住感嘆。

「當然囉。」後面有個聲音回應我:「那你知道 BFS 和 DFS,分別對應 Queue 和 Stack 嗎?」

這種明顯用來呼應前面內容的題目——我一轉頭,果然又是那個小孩。

「別小看我啊!」我挺起胸膛。「Queue 是順著來,Stack 是逆著走。DFS 會一路往下到底,再回頭倒退找,當然就是 Stack;而 BFS 是一層層排隊找,對應 Queue!」

「嘖——真無聊,被你秒答了。」孩子撇撇嘴。

我得意一笑:「就算你要我直接實作 Tree 的程式碼,我也沒問題!」

「哦?這可是你自己說的喔。」小孩狡黠一笑,手指輕輕一揮,半透明的程式碼像全息投影一樣懸浮在空中。

// 節點定義
class TreeNode<T : Comparable<T>>(val value: T) {
    var left: TreeNode<T>? = null
    var right: TreeNode<T>? = null
}

// 二元搜尋樹 (Binary Search Tree)
class BinarySearchTree<T : Comparable<T>> {
    var root: TreeNode<T>? = null

    // 插入新值
    fun insert(value: T) {
        //todo
    }

    private fun insertRec(node: TreeNode<T>?, value: T): TreeNode<T> {
        //todo
        return node
    }

    // 深度優先搜尋 (DFS) 
    fun inorderTraversal(node: TreeNode<T>? = root) {
        //todo
    }

    // 廣度優先搜尋 (BFS) 
    fun levelOrderTraversal() {
        //todo
    }
}

「等一下,這裡的 Comparable 是什麼意思?」我指著程式碼問。

「啊,那是因為插入和搜尋的時候,都要比較大小嘛。」小孩晃著腦袋解釋道。「用 Comparable 就能保證節點裡放的東西能夠比較。例如整數、浮點數,甚至字串都行。只要有定義大小關係,就能丟進來用。」

「原來可以這樣做啊!」我恍然大悟地點點頭,覺得這設計還真是巧妙,不管其他,只要知道能比較就夠了。


上一篇
樹上的家族:父母、孩子和葉子
系列文
奶茶裡藏的資料結構(Kotlin範例)27
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言