圖解數據結構——二叉查找樹/二叉排序樹


 

什么是二叉查找樹?

二叉查找樹又叫二叉排序樹。它是一種樹型數據結構。抽象成圖片如下圖:

二叉樹有以下特點:

1、任意節點的左子節點都小於它。

2、任意節點的右子節點都大於它。

3、任意節點的左右子樹都是二叉查找樹。(其實滿足上面兩點也就基本滿足了這個)

 

小提示:為什么二叉查找樹要有上面的這三個特點呢?因為如果具有了這三個特點的,那么這棵樹就相當於存儲了一個排序好的數據了。這樣在查找的時候,就能使用二分法進行查找。如果不知道什么是二分法,建議先稍微理解一下二分法是怎么查找數據的。簡單來說就是在一組排序好的數據中每次查找的時候都把需要查找的數據分成兩份。比如在[1,2,3,4,5]中查找4,第一次查找就把1到5分成兩份,比對3。如果比3大那么在把3后面的分成兩份再比較中間的,依次套娃。

 

二叉查找樹有什么優點呢?

二叉查找樹可以讓我們更快的在一堆數據中找到想要的某個數據。

舉個例子:

上圖的二叉查找樹中存有[1,2,3,4,5,6,7]這7個數據,每個數據代表一個節點,我現在要在這7個數據查到3這個數據。查找步驟如下:

1、首先,跟根節點的4比較,發現3<4,所以下一步查找4節點的左孩子2節點。(為什么要查找左孩子,參照上面二叉樹的的特點1)

2、跟2節點比較,發現3>2,所以下一步查找2節點的右孩子3節點。(為什么要查找右孩子,參照上面二叉樹的的特點2)

3、跟3節點比較,發現3=3,至此對比三次,找到想要的數據了。

從上面的例子我們看出來,在七個數據中查找“3”我們只查找了三次。

二叉查找樹利用了二分法的思想。在一個二叉查找樹中查找所需的數據,最大查找次數等於二叉樹的高度。(如上面例子中的樹的高度是3,很容易理解什么是樹的高度)

 

二叉查找樹怎么插入數據呢?

向二叉查找樹中插入數據和在其中查找數據類似,依次對比,然后按照二叉樹的特點插入指定位置。

比如在上面的二叉查找樹中插入8。

 

二叉查找樹有什么缺陷嘛?

當然有,如果你只按照上面的特點去用代碼實現一個二叉查找樹,那么是會有缺點的。

來舉個例子:

首先給一個初始的二叉查找樹,如下圖:

我們使用上面的方法插入一個數字6。

再添加7、8、9。

這樣,所有的節點就傾向於同一邊了,都快變成一個鏈表了。

這樣就失去了二叉查找樹的優點了,查找效率特別低下。

 

怎么解決這些缺陷呢?

我們可以結合平衡的概念,將二叉查找樹升級成(avl)平衡二叉查找樹。

下一篇文章繼續(avl)平衡二叉樹。二叉查找樹就先不用代碼實現了,因為實現了,使用的時候也有很多缺陷。

介紹完了平衡二叉查找樹會提供平衡二叉查找樹的代碼實現。


 如果你發現了什么問題,歡迎提出意見,我們共同進步。

 end...

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM