1. 程式人生 > >資料結構--樹和二叉樹02

資料結構--樹和二叉樹02

6.查詢樹(二叉排序樹)的基本定義

查詢二叉樹,又稱二叉排序樹。一棵查詢二叉樹,或為空樹,活滿足以下遞迴條件:

1.查詢樹的左右子樹各是一棵查詢樹

2.若查詢樹的左子樹非空,則左子樹上的各個結點值均小於根結點的值

3.若查詢樹的右子樹非空,則右子樹上的各個結點的值均大於根結點的值



查詢二叉樹的基本操作:


查詢結點:根據傳入的Key值進行對比,如果小於該結點,則與其左子結點比較,如果大於該結點,則與其右結點比較。一次類推

插入結點: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)