基本定義**:
privatenode 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...
資料結構 二叉搜尋樹
二叉搜尋樹的所有節點都滿足左子樹上的所有節點都比自己小,而右子樹上的所有節點都比自己大這一條件。當刪除某個節點時,需要根據下面幾種情況分別進行處理 需要刪除的節點沒有左兒子,那麼就把右兒子提上去。需要刪除的節點的左兒子沒有右兒子,那麼就把左兒子提上去。以上兩種情況都不滿足的話,就把左兒子的子孫 左子...