資料結構--樹和二叉樹02
6.查詢樹(二叉排序樹)的基本定義
查詢二叉樹,又稱二叉排序樹。一棵查詢二叉樹,或為空樹,活滿足以下遞迴條件:
1.查詢樹的左右子樹各是一棵查詢樹
2.若查詢樹的左子樹非空,則左子樹上的各個結點值均小於根結點的值
3.若查詢樹的右子樹非空,則右子樹上的各個結點的值均大於根結點的值
查詢二叉樹的基本操作:
插入結點:1.如果相同鍵值的結點已在查詢二叉樹中,則不進行插入
2.如果該查詢二叉樹為空樹,則以該新結點為查詢二叉樹
3.將要插入的結點的鍵值與插入後的父結點的鍵值比較,就能確定新結點是父結點的左子結點,還是右子結點,並進行相應插入
刪除結點:1.若待刪除結點P是葉子結點,則直接刪除該結點
2.若待刪除的結點P只有一個葉子結點,則將該結點直接刪除,將該結點的子結點,與待刪除結點的父結點相連
3.若待刪除的結點P有左右兩個子結點,則在其左子樹上,用中序遍歷查詢關鍵值最大的結點S,用結點S代替結點P,再將結點P刪除。結點S必定屬於以上2中情況
7.哈夫曼樹(最優二叉樹)
帶權路徑長度最小的樹,即為哈夫曼樹
樹的路徑長度:根結點到各個結點路徑之和。 同樣結點的樹,完全二叉樹的路徑長度是最短的
權:人為定義的一個概念,在應用當中為某一個結點賦予一個有意義的常數
帶權的路徑長度:8 普通長度 3 帶權3*8=24 計算機訪問該結點的頻度
樹的帶權路徑長度:將所有帶權結點值,相加(樹的代價)
例題1:
將這組權值拆解成森林:5,29,7,8,14,23,3,11
每次選取兩個最小的結點,作為左右子樹,生成一個森林,將新生成結點放到資料中,將原來的兩個結點刪除掉,依次執行
哈夫曼編碼:左側子結點指標為0 右側為1
如:23的編碼為 00 ,3的編碼為 0110
例題2
根據題目要求可將該哈夫曼樹畫出,步驟如上文
Result = 2*3+5*3+7*2+9*1=44
8.線索二叉樹
實際就是對葉子節點的指標空間進行利用
二叉樹為非線性結構,遍歷二叉樹就是將二叉樹結構轉化為需要的線性結構,遍歷二叉樹花費非常大
1. 可以申請一塊空間將遍歷順序儲存下來,的到前驅結點和後續結點比較方便,不需要再去遍歷。但非常消耗空間
2.鏈式儲存結構如下,葉子結點的指標為空,浪費空間
線索二叉樹新型結構如下
如何將二叉樹轉化為線索二叉樹(就是將葉子結點的指標,根據遍歷情況不同指向前驅和後繼,沒有前驅後繼時指向NULL)