古詩詞大全網 - 成語解釋 - 二叉排序樹

二叉排序樹

二叉排序樹也叫二叉搜索樹、二叉查找樹。二叉排序樹樹是壹顆它的左子樹上的節點都小於根節點,右子樹上的節點都大於根節點的二叉樹,且其左右子樹也是二叉排序樹。

實例

當要向二叉排序樹中插入元素的時候,從根節點開始查找,先將根節點作為當前節點,如果要插入的值比當前節點的值小,則判斷當前節點的左孩子是不是空,如果是空則將要插入的值作為當前節點的左孩子,不是空則將當前節點的左孩子作為當前節點繼續查找;當要插入的值比當前節點的值大時,判斷當前節點的右孩子是不是空,如果是空則將要插入的值作為當前節點的右孩子,不是空則把當前節點的右孩子作為當前節點繼續查找

節點定義

遞歸實現

非遞歸實現

使用中序遍歷,遍歷出來的結構剛好是壹個升序排列的數列

遞歸寫法

非遞歸寫法

搜索二叉排序樹的時候,從根節點開始搜索,將根節點作為當前節點,如果當前節點的值和搜索的值相等,則搜索結束,返回成功;如果當前節點的值小於搜索值,則判斷當前節點的左孩子是不是空,如果是空,則搜索的值不在樹中,搜索結束返回失敗,如果不為空,則將當前節點的左孩子作為當前節點,繼續搜索;如果當前節點的值大於搜索值,則判斷當前節點的右子樹是不是空,如果是空,則搜索的值不在樹中,搜索結束,返回失敗,如果不為空,則將當前節點的右孩子作為當前節點,繼續搜索。

二叉排序樹的刪除分為如下三種基本的情況

直接刪除節點即可

將要刪除的節點的孩子節點替換當前節點即可

在要刪除的節點的右子樹中找壹個最小的值來替換掉要刪除的節點,同時將這個最小的節點刪除掉(也可以從左子樹中找壹個最大的節點)

具體情況

算法實現:

二叉排序樹的查找時間與二叉樹的高度有關,高度越高需要的查找時間就越多。

二叉排序樹的高度有兩種極端的情況,壹種是完全二叉樹,壹種是每層只有壹個節點的情況,變成了壹個鏈表。

當是完全二叉樹的時候:這種情況下的時間復雜為O(log2N)

當每壹層只有壹個節點時,也就是鏈表的時候:這種情況下的時間復雜度為O(n)

所以二叉排序樹的搜索時間復雜度在:O(log2N) O(n)之間。它的插入,刪除復雜度也在O(log2N) O(n)之間