資料結構 二叉搜尋樹

2022-08-19 12:21:09 字數 3562 閱讀 9967

基本定義**:

private

node root;

intcount;

icomparer

comparer;//

比較器public

插入實現:

public

void

insert(key key,value value)

//向以node為根的二分搜尋樹中, 插入節點(key, value), 使用遞迴演算法

//返回插入新節點後的二分搜尋樹的根

private

node insert(node node,key key,value value)

//如果key存在於x為根節點的子樹中則更新它的值

//否則將以key和val為鍵值對的新結點插入到該子樹中

int cmp =comparer.compare(key, node.key);

if (cmp == 0

) node.val =value;

else

if (cmp < 0

) node.left =insert(node.left, key, value);

else

node.right =insert(node.right, key, value);

return

node;

}

搜尋實現:

//

檢視二分搜尋樹中是否存在鍵key

bool

contain(key key)

private

bool

contain(node node, key key)

//在二分搜尋樹中搜尋鍵key所對應的值。如果這個值不存在, 則返回null

遍歷實現:

//

前序遍歷

void

preorder()

//中序遍歷

void

inorder()

//後序遍歷

void

postorder()

//層序遍歷

void

levelorder()

}//對以node為根的二叉搜尋樹進行前序遍歷, 遞迴演算法

private

void

inorder(node node)

}//對以node為根的二叉搜尋樹進行中序遍歷, 遞迴演算法

private

void

preorder(node node)

}//對以node為根的二叉搜尋樹進行後序遍歷, 遞迴演算法

查詢最大最小 && 刪除最大最小 **實現:

//

尋找最小得值

key minimum()

//尋找最大得值

key maximum()

//返回以node為根的二分搜尋樹的最大鍵值所在的節點

private

node maximum(node node)

//返回以node為根的二分搜尋樹的最小鍵值所在的節點

private

node minimum(node node)

//從二叉樹中刪除最小值所在節點

void

removemin()

//從二叉樹中刪除最大值所在節點

void

removemax()

//刪除掉以node為根的二分搜尋樹中的最大節點

//返回刪除節點後新的二分搜尋樹的根

private

node removemax(node node)

node.right =removemax(node.right);

return

node;

}//刪除掉以node為根的二分搜尋樹中的最小節點

//返回刪除節點後新的二分搜尋樹的根

刪除節點實現:

//

從二分搜尋樹中刪除鍵值為key的節點

void

remove(key key)

//刪除掉以node為根的二分搜尋樹中鍵值為key的節點, 遞迴演算法

//返回刪除節點後新的二分搜尋樹的根

private

node remove(node node, key key)

else

if (cmp > 0

)

else

//key==node.key

//待刪除節點右子樹為空的情況

if (node.right == null

)

&& node.right!=null

//待刪除節點左右子樹均不為空的情況

//找到比待刪除節點大的最小節點, 即待刪除節點右子樹的最小節點

//用這個節點頂替待刪除節點的位置

node delnode =node;

node =minimum(delnode.right);

node.right =removemin(delnode.right);

node.left =delnode.left;

}count--;

return

node;

}

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

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

資料結構(二叉搜尋樹)

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

資料結構 二叉搜尋樹

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