[Data Structure & Algorithm] 二叉排序樹
二叉排序樹 BST
- 性質
- 若左子樹非空,則左子樹上全部記錄的值<(=)根記錄的值
- 若右子樹非空,則右子樹上全部記錄的值>(=)根記錄的值
- 左右子樹自己又是一顆二叉排序樹
- 按中序遍歷,能夠獲得一個遞增有序序列
- 空樹也是二叉排序樹
- 存儲 - 通常用二叉鏈表
二叉排序樹的插入
- 基本思路
1.若是二叉樹爲空,把要插入的關鍵字做爲根結點
2.若是二叉樹不爲空,將要插入的關鍵字和根結點比較,大於根結點的插入到右子樹,不然插入到左子樹
二叉排序樹的查找
- 基本思路
1.將要查找的關鍵字和根結點比較
2.1若是=根結點,直接返回
2.2若是>根結點,到右子樹中查找
2.3若是<根結點,到左子樹中查找
3.重複1,2,直到找到相等的值或查詢到空結點
- 平均查找長度 ABL
- 含有n個結點的二叉排序樹的ABL不惟一,取決於樹的形態
二叉排序樹的刪除
- 基本思路
1.查找要刪除的關鍵字,令p指向該關鍵字,f指向該關鍵字的父結點
2.1 若是p爲葉子結點,直接刪除
2.2 若是p只存在一個子樹,將p的子樹直接和f相連
2.3 若是p左右子樹都存在,
方法一 - 將p的左子樹s(中序序列中的直接前驅)直接和f相連,再把p的右子樹做爲s的右子樹
方法二 - 將p的左(或右)子樹s(中序序列中的直接前驅(或後繼))與p交換位置,再刪除p,此時*p只會有左(或右)子樹,或者無子樹,能夠參考2.2
歡迎關注本站公眾號,獲取更多信息