1、平衡二叉樹:或者是一棵空的二叉排序樹,或者是具有下列性質的二叉排序樹:
⑴ 根結點的左子樹和右子樹的深度最多相差1;
⑵ 根結點的左子樹和右子樹也都是平衡二叉樹。
平衡因子:結點的平衡因子是該結點的左子樹的深度與右子樹的深度之差。
在平衡樹中,結點的平衡因子可以是1,0,-1。
最小不平衡子樹:在平衡二叉樹的構造過程中,以距離插入結點最近的、且平衡因子的絕對值大於1的結點為根的子樹。
構造時,邊構造邊檢查。
2、
設結點a為最小不平衡子樹的根結點,對該子樹進行平衡調整歸納起來有以下四種情況:
ll型rr型
lr型rl型
ll型:
b=a->lchild;
a->lchild=b->rchild;
b->rchild=a;
a->bf=0; b->bf=0;
if (fa==null) root=b;
else if(a==fa->lchild) fa->lchild=b;
else fa->rchild=b;
rr型:
b=a->rchild;
a->rchild=b->lchild;
b->lchild=a;
a->bf=0; b->bf=0;
if (fa==null)
root=b;
else if (a==fa->lchild)
fa->lchild=b;
else
fa->rchild=b;
lr型:
b=a->lchild;c=b->rchild;
b->rchild=c->lchild;
a->lchild=c->rchild;
c->lchild=b; c->rchild=a;
rl型:
b=a->rchild; c=b->lchild;
b->lchild=c->rchild;
a->rchild=c->lchild;
c->lchild=a; c->rchild=b;
綜上所述, 在乙個平衡二叉排序樹上插入乙個新結點s時,主要包括以下三步:
(1) 查詢應插位置, 同時記錄離插入位置最近的可能失衡結點a(a的平衡因子不等於0)。
(2) 插入新結點s, 並修改從a到s路徑上各結點的平衡因子。
(3) 根據a、 b的平衡因子, 判斷是否失衡以及失衡型別, 並做相應處理。
3、雜湊表的查詢技術
雜湊函式的構造:
直接定址法:h(key) = a * key + b (a,b為常數)
除留餘數法:h(key)=key mod p (p為小於或等於表長(最好接近表長)的最小素數)
數字分析法:事先知道關鍵碼的分布,關鍵碼的分布均勻
平方取中法:事先不知道關鍵碼的分布且關鍵碼的位數不是很大。
摺疊法(分段疊加法):關鍵碼位數很多,事先不知道關鍵碼的分布。
衝突處理方法:
①開放定址法(閉雜湊方法):
用開放定址法處理衝突得到的雜湊表叫閉雜湊表。
如何尋找下乙個空的雜湊位址?
(1)線性探測法
hi=(h(key)+di) % m (di=1,2,…,m-1)
int hashsearch1(int ht[ ], int m, int k)
if (i==j) throw "溢位";
else ht[i]=k; //查詢不成功時插入
}
(2)二次探測法:hi=(h(key)+di)% m
(di=12,-12,22,-22,…,q2,-q2且q≤m/2)
(3)隨機探測法:hi=(h(key)+di)% m
(di是乙個隨機數列,i=1,2,……,m-1)
(4)再hash法
②鏈位址法(拉鍊法、開雜湊方法)
用拉鍊法處理衝突構造的雜湊表叫做開雜湊表。
node*hashsearch2(node*ht[ ], int m, int k)
}
③建立公共溢位區
雜湊表包含基本表和溢位表(順序存放)兩部分(通常溢位表和基本表的大小相同)
雜湊表:採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間稱為雜湊表。
雜湊函式:將關鍵碼對映為雜湊表中適當儲存位置的函式。
雜湊既是一種查詢技術,也是一種儲存技術。
平衡二叉樹例題 平衡二叉樹
acwing 72.平衡二叉樹 思路一 求每個節點的左右子樹深度,根據深度差判斷,直到葉子節點結束,效率不夠高,每個節點都要用兩次計算深度的遞迴函式 思路二 從葉子節點開始,計算深度差,一旦有深度差大於1的,就直接返回0,也不用管上面的深度是不是正確了,畢竟我們只需要true和false兩種狀態,省...
二叉查詢樹與平衡二叉樹
二叉查詢樹的性質 對於樹中的每乙個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,它的右子樹中的所有關鍵字值大於x的關鍵字值。二叉查詢樹的平均深度為o logn 下面看一下它的相關的操作函式。刪除乙個二叉樹 遞迴形式 void makeempty treenode root 在二叉查詢樹中找都某個...
二叉樹 平衡二叉樹
1.題目 給定乙個二叉樹,判斷這棵二叉樹是否是高度平衡的二叉樹 平衡二叉樹 乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過1 2.題目分析 1 如果乙個節點的兩個子樹的深度之差超過1,則不是平衡二叉樹 2 如果乙個節點的兩個子樹的深度之差不超過1,則是平衡二叉樹 3.程式分析 1 若這棵二...