二叉查詢樹性質:
設x為二叉查詢樹中的乙個節點。
如果y是x的左子樹中的乙個結點,則key[x]<=key[y]。
如果y是x的右子樹中的乙個結點,則key[x]>=key[y]。
如果x是一棵包含n個結點的子樹的根,則呼叫inorder-tree-walk(x)過程的時間為θ(n)。
void inodertreewalk(node *rt)
12.1-1 基於關鍵字集合,畫出高度為2、3、4、5、6的二叉查詢樹。
12.1-2 二叉查詢樹性質與最小堆性質之間有什麼區別?能否利用最小堆性質在o(n)時間內,按序輸出含有n個結點的樹中的所有關鍵字?行的話,解釋該怎麼做;不行的話,說明原因。
二叉查詢樹的中序遍歷時有序的,最小值在最左葉子結點上。最小堆的遍歷是無序的,最小值在根節點。
12.1-3 給出乙個非遞迴的中序樹遍歷演算法。(兩種,用棧,或假設可測試兩個指標是否相等)
用棧:
12.1-4 對一棵含有n個結點的樹,給出能在θ(n)時間內,完成前序遍歷和後序遍歷的遞迴演算法。void output(node *rt)
}else }}
}
void preorder(node *rt)
void postorder() {
if (rt->l) postorder(rt->l);
if (rt->r) postorder(rt->r);
cout
12.1-5 論證:在比較模型中,最壞情況下排序n個元素的時間為ω(nlgn),則為從任意的n個元素中構造出一棵二叉查詢樹,任何乙個基於比較的演算法在最壞情況下,都要花ω(nlgn)時間。
演算法導論 第12章 二叉查詢樹
二叉查詢樹是一種樹資料結構,它與普通的二叉樹最大的不同就是二叉查詢樹滿足乙個性質 對於樹中的任意乙個節點,均有其左子樹中的所有節點的關鍵字值都不大於該節點的關鍵字值,其右子樹中的任意乙個節點的關鍵字值都不小於該節點的關鍵字值。在二叉查詢樹上可以進行搜尋 取最小值 取最大值 取指定節點的前驅 取指定節...
演算法導論第12章 二叉搜尋樹
左子樹 根 右子樹 根據二叉樹的基本性質,向左子樹或右子樹遞迴即可 查詢結點x的後繼y分為兩種情況 右結點存在,即只需要找到右子樹中最小的元素就好了 右結點不存在,此時就要向親代查詢,直到找到右上方的親代,此時y是x的最底層祖先,且y的左孩子是x的乙個祖先。迭代演算法 類似於一根小棒在樹中移動,最終...
演算法導論 12章 二叉搜尋樹
最壞執行時間 完全二叉樹 o lgn 線性鏈 o n 隨機構造 o lgn 平均時間o lgn 二叉搜尋樹性質 左子樹小於雙親,右子樹大於雙親 二叉搜尋樹的基本操作所花費的時間與這棵樹的高度成正比。遍歷中序遍歷o n 子樹根在左右之間 偽 inorder tree walk x if x nil i...