資料結構 二叉搜尋樹

2022-08-29 18:33:12 字數 1551 閱讀 2074

在實際程式設計中,樹是經常遇到的資料結構,但可惜的是,我們經常不知道該用樹了。實際情況就是,我們在避免過早使用資料結構,以防止引入不必要的複雜性。
樹的邏輯非常簡單:除了根結點外,其他每個結點都只有乙個父結點,除了葉結點外,其他所有結點都有乙個或多個子結點。父結點和子結點間用指標鏈結。樹有很多種形式,最常見的是二叉樹,每個結點最多只有兩個子結點。

二叉樹中還有許多形式,像是二叉搜尋樹,滿足這個關係左子結點<=根結點<=右子結點。另外兩種常見的形式就是堆和紅黑樹。堆分為最大堆和最小堆,在最大堆中,根結點的值最大,最小堆則相反。堆非常適合用於快速查詢最值,像是堆排序,就是利用了這點。紅黑樹是把樹中的結點定義為紅和黑兩種顏色,並通過規則確保從根結點到葉結點的最長路徑的長度不超過最短路徑的兩倍。

本次就來介紹二叉搜尋樹的實現(畢竟是樹裡面最簡單的)

public class bstree> 

}......

}

bstnode包含二叉查詢樹的幾個基本資訊:

(01) key -- 它是關鍵字,是用來對二叉查詢樹的節點進行排序的。

(02) left -- 它指向當前節點的左孩子。

(03) right -- 它指向當前節點的右孩子。

(04) parent -- 它指向當前節點的父結點。

此外,mroot是bstnode型別,而bstnode是二叉查詢樹的節點,它是bstree的內部類。

遞迴版本

private bstnodesearch(bstnodex, t key) 

public bstnodesearch(t key)

遞迴版本

private bstnodeiterativesearch(bstnodex, t key) 

return x;

}public bstnodeiterativesearch(t key)

節點的前驅:是該節點的左子樹中的最大節點。

節點的後繼:是該節點的右子樹中的最小節點。

查詢前驅節點的**

public bstnodepredecessor(bstnodex) 

return y;

}

查詢後繼節點的**

public bstnodesuccessor(bstnodex) 

return y;

}

插入節點的**

private void insert(bstreebst, bstnodez) 

z.parent = y;

if (y==null)

bst.mroot = z;

else

}public void insert(t key)

刪除節點的**

private bstnoderemove(bstreebst, bstnodez) 

public void remove(t key)

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

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

資料結構(二叉搜尋樹)

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

資料結構 二叉搜尋樹

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