二叉查找樹(Binary Search Tree),也稱二叉搜索樹,是指一棵空樹或者具備下列性質的二叉樹:算法
- 任意節點的左子樹不空,則左子樹上全部結點的值均小於它的根結點的值;
- 任意節點的右子樹不空,則右子樹上全部結點的值均大於它的根結點的值;
- 任意節點的左、右子樹也分別爲二叉查找樹;
- 沒有鍵值相等的節點。
二叉查找樹相比於其餘數據結構的優點在於查找、插入的時間複雜度較低。爲O(log n)。二叉查找樹是基礎性數據結構,用於構建更爲抽象的數據結構,如集合、multiset、關聯數組等。(摘自維基百科)數組
下面 4 張 GIF 動圖,是 penjee 官博製做分享。,分享給你們。數據結構
圖1:查找 BST 中的某個元素
在二叉搜索樹b中查找x的過程爲:spa
- 若b是空樹,則搜索失敗,不然:
- 若x等於b的根節點的數據域之值,則查找成功;不然:
- 若x小於b的根節點的數據域之值,則搜索左子樹;不然:
- 查找右子樹。
圖2 ↓ :從有序數組構造一個二叉查找樹
圖3 ↓:往 BST 中插入元素
向一個二叉搜索樹b中插入一個節點s的算法,過程爲:3d
- 若b是空樹,則將s所指結點做爲根節點插入,不然:
- 若s->data等於b的根節點的數據域之值,則返回,不然:
- 若s->data小於b的根節點的數據域之值,則把s所指節點插入到左子樹中,不然:
- 把s所指節點插入到右子樹中。(新插入節點老是葉子節點)
圖4 ↓:BST 轉成有序數組