學習 資料結構 二叉搜尋樹

2021-10-06 02:25:28 字數 1131 閱讀 7657

定義

性質

二叉搜尋樹中的關鍵字總是以滿足二叉搜尋樹性質的方式來儲存:

設x是二叉搜尋樹中的乙個節點。

如果y是x左子樹中的乙個節點,那麼y.key  <= x.key。

如果y是x右子樹中的乙個節點,那麼y.key >= x.key。

二叉搜尋樹性質允許我們通過乙個簡單的遞迴演算法來實現按序輸出二叉搜尋樹中的所有關鍵字,這種演算法稱為中序遍歷(inorder tree walk)演算法。這樣命名的原因是輸出的子樹根的關鍵字位於其左子樹的關鍵字值和右子樹的關鍵字值之間。(類似地,先序遍歷(前序遍歷,preorder tree walk)中輸出的根的關鍵字在其左右子樹的關鍵字之前,而後序遍歷(postorder tree walk)輸出的根的關鍵字在其左右子樹的關鍵字值之後)呼叫下面的過程inorder-tree-walk(t.root)[偽**段],就可以輸出一棵二叉搜尋樹t中的所有元素。

inorder-tree-walk(x)

if x != nil

inorder-tree-walk(x.left)

print x.key

inorder-tree-walk(x.right)

前序遍歷:根結點 -> 左子樹 -> 右子樹

中序遍歷:左子樹 -> 根結點 -> 右子樹

後序遍歷:左子樹 -> 右子樹 -> 根結點

/*

*/template struct tnode ;

template void pre_order(iterator p) //前序遍歷

}template void in_order(iterator p) //中序遍歷 中序遍歷的順序在橫軸上的投影

}template void post_order(iterator p) //後序遍歷

}

[未完...]

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

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

資料結構(二叉搜尋樹)

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

資料結構 二叉搜尋樹

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