二元搜尋樹有一種實現方式,就是用鍊錶實現,而鍊錶是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鍊錶中的指針鏈接次序實現的,且鍊錶是由一系列結點組成,結點可以在運行時動態產生。
二元搜尋樹
#二元搜尋樹(Binary Search Tree)是一種對排序與尋找都很有用的特殊二元樹
定義:左子樹< 根節點< 右子樹
實作方式:一般用鍊錶實作
操作集:建立二元樹、判斷是否為空、遍歷、尋找、尋找最小元素、尋找最大元素、插入、刪除
時間複雜度:最好O(logN)
最差O(N)
相關介紹:
鍊錶是一種實體儲存單元上非連續、非順序的儲存結構,資料元素的邏輯順序是透過鍊錶中的指針連結次序實現的。鍊錶由一系列結點(鍊錶中每一個元素稱為結點)組成,結點可以在運行時動態產生。每個結點包括兩個部分:一個是儲存資料元素的資料域,另一個是儲存下一個結點位址的指標域。相較於線性表順序結構,操作複雜。由於不必須按順序存儲,鍊錶在插入的時候可以達到O(1)的複雜度,比另一種線性表順序表快得多,但是查找一個節點或訪問特定編號的節點則需要O(n)的時間,而線性表和順序表對應的時間複雜度分別是O(logn)和O(1)。
使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用電腦記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了數組隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。鍊錶最明顯的好處是,常規數組排列關聯項目的方式可能不同於這些資料項目在記憶體或磁碟上順序,資料的存取往往要在不同的排列順序中轉換。鍊錶允許插入和移除表上任意位置上的節點,但是不允許隨機存取。鍊錶有很多種不同的類型:單向鍊錶,雙向鍊錶以及循環鍊錶。鍊錶可以在多種程式語言中實現。像Lisp和Scheme這樣的語言的內建資料型別中就包含了鍊錶的存取和操作。程式語言或物件導向語言,如C,C 和Java則依賴易變工具來產生鍊錶。
以上是二元搜尋樹有幾種實作方式的詳細內容。更多資訊請關注PHP中文網其他相關文章!