1. 程式人生 > >二叉查詢樹(BST)

二叉查詢樹(BST)

前一篇介紹了樹,卻未介紹樹有什麼用。但就算我不說,你也能想得到,看我們Windows的目錄結構,其實就是樹形的,一個典型的分類應用。當然除了分類,樹還有別的作用,我們可以利用樹建立一個非常便於查詢取值又非常便於插入刪除的資料結構,這就是馬上要提到的二叉查詢樹(Binary Search Tree),這種二叉樹有個特點:對任意節點而言,左子(當然了,存在的話)的值總是小於本身,而右子(存在的話)的值總是大於本身。


這種特性使得我們要查詢其中的某個值都很容易,從根開始,小的往左找,大的往右找,不大不小的就是這個節點了;插入一樣的道理,從根開始,小的往左,大的往右,直到葉子,就插入,演算法比較簡單,不一一列了,它們的時間複雜度期望為Ο(logn)。(為什麼是“期望”,後面會講)

刪除則稍微麻煩點,因為我們刪的不一定是葉子,如果只是葉子,那就好辦,如果不是呢?我們最通常的做法就是把這個節點往下挪,直到它變為葉子為止,看圖。


也許你要問,如果和左子樹最大節點交換後,要刪除的節點依然不是葉子,那怎麼辦呢?那繼續唄,看圖:

那左子樹不存在的情況下呢?你可以查詢右子樹的最小節點,和上面是類似的,圖我就不畫了。