二叉查找樹
二叉查找樹,由於不平衡,如果連續插入的數據是有順序的、會導致如下圖B的所示,此時搜索會退化到O(N)
二叉查找樹,也稱二叉搜索樹,或二叉排序樹。其定義也比較簡單,要麼是一顆空樹,要麼就是具有如下性質的二叉樹:
(1)若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;
(2) 若任意節點的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值;
(3) 任意節點的左、右子樹也分別爲二叉查找樹;
(4) 沒有鍵值相等的節點。
如上圖所示,是不同形態的二叉查找樹。二叉查找樹是對要查找的數據進行生成樹,左支的值小於右支的值。在查找的時候也是一樣的思路,從根節點開始,比節點大進入右支,比節點小進入左支,直到查找到目標值。
二叉查找樹的插入算法比較簡單:空樹,就首先生成根節點;不是空樹就按照查找的算法,找到父節點,然後作爲葉子節點插入,如果值已經存在就插入失敗。
刪除操作稍微複雜一點,有如下幾種情況:
(1)如果刪除的是葉節點,可以直接刪除;
(2)如果被刪除的元素有一個子節點,可以將子節點直接移到被刪除元素的位置;
(3)如果有兩個子節點,這時候就採用中序遍歷,找到待刪除的節點的後繼節點,將其與待刪除的節點互換,此時待刪除節點的位置已經是葉子節點,可以直接刪除。如下圖: