原创 用Java實現【二叉排序樹】

本文完整代碼下載 一、介紹 二叉排序樹(Binary Sort Tree),又稱二叉查找樹(Binary Search Tree),亦稱二叉搜索樹。 對於二叉排序樹的任何一個非葉子結點,要求左子結點的值比當前結點的值小,右子結點的

原创 用Java實現【AVL樹】

本文基於二叉排序樹(BST)創作,若對二叉排序樹不瞭解建議先掌握二叉排序樹再學習文本 本文完整代碼下載 一、介紹 平衡二叉樹也叫平衡二叉搜索樹(Self-balancing binary search tree)又被稱爲AVL樹

原创 用Java實現【線索二叉樹】完整版

一、基本介紹 n個結點的二叉鏈表中含有n+1 【公式 2n-(n-1)=n+1】 個空指針域。利用二叉鏈表中的空指針域,存放指向該結點在某種遍歷次序下的前驅和後繼結點的指針(這種附加的指針稱爲"線索") 這種加上了線索的

原创 用Java實現【順序存儲二叉樹】

建議先實現二叉樹 一、什麼是順序存儲二叉樹 基本說明     從數據存儲來看,數組存儲方式和樹的存儲方式可以相互轉換,即數組可以轉換成樹,樹也可以轉換成數組 要求 二叉樹的結點能夠以數組的方式來存放 arr: [1,2,3,4

原创 用Java實現【哈夫曼樹】的數據壓縮

關於哈夫曼樹入門請看上節 《用Java實現【哈夫曼樹】》 本文代碼文件哈夫曼樹完整代碼 哈夫曼樹基本代碼 //1. 將赫夫曼編碼表存放在 Map<Byte,String> 形式 static Map<Byte, Strin

原创 用Java實現【堆排序】

一、堆排序基本介紹 堆排序是利用堆這種數據結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間複雜度均爲O(nlogn),它也是不穩定排序。 堆是具有以下性質的完全二叉樹:每個結點的值都大於或等於其左右孩子結

原创 用Java數組實現【哈夫曼樹】

一、基本概念 給定N個權值作爲N個葉子結點,構造一棵二叉樹,若該樹的帶權路徑長度達到最小,稱這樣的二叉樹爲最優二叉樹,也稱爲哈夫曼樹(Huffman Tree)。哈夫曼樹是帶權路徑長度最短的樹,權值較大的結點離根較近。 路徑和路

原创 Java實現【快速排序】【歸併排序】【桶排序/基數排序】

一、快速排序 快速排序算法通過多次比較和交換來實現排序,其排序流程如下: 1.首先設定一個分界值,通過該分界值將數組分成左右兩部分。 2.將大於或等於分界值的數據集中到數組右邊,小於分界值的數據集中到數組的左邊。此時,左邊部分中

原创 一文看懂如何用Java實現【哈希表】HashTable

一、什麼是哈希表 散列表(Hash table,也叫哈希表),是根據關鍵碼值(Key value)而直接進行訪問的數據結構。也就是說,它通過把關鍵碼值映射到表中一個位置來訪問記錄,以加快查找的速度。這個映射函數叫做散列函數,存放記

原创 Java實現【冒泡排序】【選擇排序】【插入排序】【希爾排序】

一、冒泡排序 public class BubbleSort { public static void main(String[] args) { // int[] arrays = {1, 4, 2, 3,

原创 用Java實現插值查找

一、什麼是插值查找 插值查找,有序表的一種查找方式。插值查找是根據查找關鍵字與查找表中最大最小記錄關鍵字比較後的查找方法。插值查找基於二分查找,將查找點的選擇改進爲自適應選擇,提高查找效率。 二、算法要求 查找表是順序存儲的有序

原创 用Java實現二分查找

什麼是二分查找 二分查找也稱折半查找(Binary Search),它是一種效率較高的查找方法。但是,折半查找要求線性表必須採用順序存儲結構,而且表中元素按關鍵字有序排列。 算法要求 1.必須採用順序存儲結構。 2.必須按關鍵字大

原创 用Java實現斐波那契查找

一、什麼是斐波那契查找 斐波那契搜索就是在二分查找的基礎上根據斐波那契數列進行分割的。在斐波那契數列找一個等於略大於查找表中元素個數的數F[n], 將原查找表擴展爲長度爲F[n](如果要補充元素,則補充重複最後一個元素,直到滿足F

原创 看完這篇還不會用Java實現【二叉樹】算我輸

本文僅作爲二叉樹的基礎入門 一、什麼是二叉樹 簡介 每個節點最多只能有兩個子節點的一種形式稱爲二叉樹。 二叉樹的子節點分爲左節點和右節點。 如果該二叉樹的所有葉子節點都在最後一層,並且結點總數= 2^n -1 , n 爲層數,則

原创 你還不知道【逆波蘭表達式】(後綴表達式)用Java怎麼實現?

一、什麼是前綴/中綴/後綴表達式 1.中綴表達式 中綴表達式是一個通用的算術或邏輯公式表示方法。操作符是以中綴形式處於操作數的中間 ,中綴表達式是人們常用的算術表示方法。 [例:1-(2+3) ] 計算方法:與我們平常計算相同。