資料結構 之實現二叉搜尋樹

2021-08-14 07:13:58 字數 1457 閱讀 8169

#include 

#include

/***

二叉樹是比較高效的訪問結構

* 單次操作的時間複雜度為

o(logn),n

為總元素個數

* 二叉搜尋樹滿足一下特點:*

左子樹上的所有節點都比自己小

* 右子樹上的所有節點都比自己大

*///

定義數樹的節點

typedef structnode node

;node *new_node(intval)

//二叉搜尋樹

typedef structbst bst;//

插入節點

voidinsert(bst *this,

intval)else

}(*cur_node) = new_node(val);}//

查詢是否有該節點,返回

0代表沒有

,1代表有

intfind(bst *this,

intval)else if(val > cur_node->val)else

}return0;}

//刪除節點

node *delete(bst *this,

intval)else if(val > (*cur_node)->val)

//如果找到要刪除的節點

else

//如果要刪除的節點左兒子沒有右兒子

,那就把左兒子補到當前節點上

else if((*cur_node)->lc->rc == null)

//其餘情況

:把左兒子的子孫中最大的節點補到要刪除的節點上

else

node *temp = *cur_node;

q->rc = (*cur_node)->rc

;q->lc = (*cur_node)->lc

;(*cur_node) = q;

free(temp);

returnq;

} }

}returnnull;}

bst *new_bst()

intmain()

執行結果:

1

0

二叉搜尋樹c 資料結構二叉搜尋樹

在n個動態的整數中搜尋某個整數?檢視其是否存在 假設使用動態陣列存放元素,從第 0 個位置開始遍歷搜尋,平均時間複雜度 o n 如果維護乙個有序的動態陣列,使用二分搜尋,最壞時間複雜度 o logn 但是新增 刪除的平均時間複雜度是 o n 針對這個需求,有沒有更好的方案?今天我們主要講的就是二叉搜...

資料結構(二叉搜尋樹)

二叉搜尋樹是一種可以高效完成以下操作的樹型的資料結構 插入乙個值 查詢是否含有某個值 刪除某個值 它儲存節點的資料資訊時,遵循以下規則,左子樹的值 根節點值 右子樹的值 下面是基本的二叉搜尋樹的實現 include include include includeusing namespace std...

資料結構 二叉搜尋樹

二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...