1. 程式人生 > >有了高效的散列表,為什麽還需要二叉樹

有了高效的散列表,為什麽還需要二叉樹

性能 http alt 刪除 數據 查找 快速 bsp png

一:二叉查找樹可以高效的實現查找,插入刪除的操作,這些map也可以實現。那麽二叉查找樹有什麽優勢?

技術分享圖片

技術分享圖片

技術分享圖片

技術分享圖片

刪除是從右子樹中找到最小的數,替換被刪除的元素。

二叉查找樹的其它操作:

可以快速的找到最大節點,最小節點,前驅節點,後繼節點。

中序遍歷可以輸出有序的數據序列,時間復雜度是O(N)

支持重復數據的二叉樹

第一:把值相同的數據存儲在同一個節點上。

第二:放到這個節點的右子樹。那麽查找和刪除的時候就要都去考慮。

技術分享圖片

技術分享圖片

技術分享圖片

二叉查找樹的時間復雜度,退化成了鏈表,時間復雜度就是O(N)

滿二叉樹,完全二叉樹的時間復雜度都是和樹的高度相關的。那麽怎麽求樹的高度?

l層範圍是【log2(n+1),log2n + 1】

完全二叉樹的高度小於等於logn.

第k層的節點個數就是2^(k-1)

平衡二叉樹的高度接近logn ,時間復雜度是O(logn)

總結:散列表是無序存儲,

散列表擴容耗時,遇到沖突,性能不穩定。

設計復雜。

有了高效的散列表,為什麽還需要二叉樹