二叉搜尋樹的結構類似於二分查詢的思想,在二叉樹結構裡面,將資料的大小分為樹的左右子樹,從而在搜尋的時候類似於二叉搜尋。
如圖:
當搜尋乙個二叉搜尋樹的時候時間複雜度就是o(logn).
構建搜尋二叉樹:
bstree(int
*arr,size_t size)
:_root(null)
void _greatnode(node* root,int
*arr,int index,size_t size)
int d = arr[index];
node* parent = null;
while(root)
if(d < parent->value)
parent->left = tmp;
else
parent->right = tmp;
}
搜尋二叉樹的刪除搜尋二叉樹的刪除分為以下幾種情況:
當二叉搜尋樹只有左子樹的時候:
當二叉搜尋樹是由右子樹的時候:
當二叉搜尋樹左右孩子都存在的時候:
當二叉搜尋樹的左右子樹都存在的時候就可以在樹的左右子樹裡面尋找乙個節點將需要刪除的結點的值進行替換,從而去刪除那個替換過的結點。
實現**:
void _del_tree(node* root,int key)
delete tmp;
}else
if(tmp->right ==
null)
delete tmp;
}else
if(tmp->right->left)
//當沒有找到可以替換的節點的時候直接進行交換刪除
if(pkey ==
null)
else}}
二叉搜尋樹c 資料結構二叉搜尋樹
在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...
資料結構(二叉搜尋樹)
二叉搜尋樹是一種可以高效完成以下操作的樹型的資料結構 插入乙個值 查詢是否含有某個值 刪除某個值 它儲存節點的資料資訊時,遵循以下規則,左子樹的值 根節點值 右子樹的值 下面是基本的二叉搜尋樹的實現 include include include includeusing namespace std...
資料結構 二叉搜尋樹
二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...