對於順序儲存,不需要維護有序性,但查詢效率低;
而有序儲存,查詢效率高,但由於插入刪除需要維護有序性,因此效率低。
本文要介紹的二叉查詢樹(也叫二叉搜尋樹、二叉排序樹、adt樹)結合了二者的優勢,不僅查詢效率高,插入和刪除效率也高。
二叉查詢樹(空樹也是二叉查詢樹)的定義:
構建一顆二叉查詢樹的目的,不是為了排序,而是為了提高查詢、插入、刪除關鍵字的速度。不管怎麼說,有序資料結構的查詢速度總是要大於無序資料結構的。
二叉查詢樹有三個操作:
本文主要實現二叉查詢樹的查詢操作。
首先,我的**有6個類,如下圖所示。
假設所有結點中沒有相同的兩個值,因為二叉查詢樹是對關鍵字的排序,而關鍵字可以理解為唯一。退一萬步來講,就算有兩條資料關鍵字相同,也可以將它們儲存於乙個結點中,即結點可以設定四個字段:
回歸主題,首先什麼是二叉排序樹的查詢呢?
查詢的思路是什麼呢?如何利用二叉查詢樹的特性進行查詢?
假設要查詢的二叉排序樹如下圖所示。
下面重點介紹一下adtsearch類。
/**
* 二叉查詢樹結點搜尋操作類
*/public class adtsearch
//證明找到了,返回這個結點
if(adtnode.getval() == key)
//比較一下,如果小於,則遞迴往左邊搜尋
if(key < adtnode.getval())
//比較一下,如果大於,則遞迴往右邊搜尋
if(key > adtnode.getval())
return null;
}/**
* 搜尋操作入口
* @param root 從該結點開始搜素
* @param key 要搜尋的值
* @return 搜尋到的結點
*/public adtnode searchentrance(adtnode root,int key)
}
示例程式
/**
* 二叉查詢樹main方法
什麼是二叉樹
什麼是二叉樹 包含滿二叉樹和完全二叉樹 通過 樹的儲存結構 一節的學習,我們了解了一些樹儲存結構的基本知識。本節將給大家介紹一類具體的樹結構 二叉樹。簡單地理解,滿足以下兩個條件的樹就是二叉樹 本身是有序樹 樹中包含的各個節點的度不能超過 2,即只能是 0 1 或者 2 例如,圖 1a 就是一棵二叉...
jsoup查詢父元素 什麼是二叉查詢樹?
對於樹的基本認識,我們很容易通過我們平常所見到的樹來理解 一棵樹,有乙個根,根往上又會分叉出大樹枝,大樹枝又會分叉出小樹枝,以此往復,直到最後是葉子。而作為資料結構的樹也是類似的,只不過我們通常將它倒著畫。樹的應用也相當廣泛,例如在檔案系統,資料庫索引中的應用等。本文會對樹的基本概念做介紹,但重點介...
二叉搜尋樹有什麼特點
二叉搜尋樹的特點是對於樹中的每個節點x,它的左子樹中所有關鍵字值小於x的關鍵字值,而它的右子樹中所有關鍵字值大於x的關鍵字值 根據這個性質,對乙個二叉樹進行中序遍歷,如果是單調遞增的,則可以說明這個樹是二叉搜尋樹。二叉搜尋樹的特點 二叉搜尋樹的特點 對於樹中的每個節點x,它的左子樹中所有關鍵字值小於...