`

java实现查找算法(三):二叉查找树算法

阅读更多
二叉查找树算法
形成树型结构,在进行查找      

public class BTreeSearch
{
 public static int Max  = 10;
 public static int[] Data = { 15, 2, 13, 6, 17, 25, 37, 7, 3, 18 }; // 数据数组
 public static int Counter = 1;

 public static void main(String args[])
 {
  int i; // 循环计数变量
  BNTreeArray BNTree = new BNTreeArray(); // 声明二叉树数组

  BNTree.TreeData[0] = Data[0];

  for (i = 1; i < Max; i++)
   BNTree.Create(Data[i]); // 建立二叉查找树

  int KeyValue = 25;
  // 调用二叉查找法
  if (BNTree.BinarySearch(KeyValue) > 0)
   // 输出查找次数
   System.out
     .println("Search Time = " + BNTree.BinarySearch(KeyValue));
  else
   // 输出没有找到数据
   System.out.println("No Found!!");
 }
}

class BNTreeArray
{
 public static int MaxSize  = 20;
 public static int[] TreeData = new int[MaxSize];
 public static int[] RightNode = new int[MaxSize];
 public static int[] LeftNode = new int[MaxSize];

 public BNTreeArray()
 {
  int i; // 循环计数变量

  for (i = 0; i < MaxSize; i++)
  {
   TreeData[i] = 0;
   RightNode[i] = -1;
   LeftNode[i] = -1;
  }
 }

 // ----------------------------------------------------
 // 建立二叉树
 // ----------------------------------------------------
 public void Create(int Data)
 {
  int i; // 循环计数变量
  int Level = 0; // 树的阶层数
  int Position = 0;

  for (i = 0; TreeData[i] != 0; i++)
   ;

  TreeData[i] = Data;
  while (true) // 寻找节点位置
  {
   // 判断是左子树或是右子树
   if (Data > TreeData[Level])
   {
    // 右树是否有下一阶层
    if (RightNode[Level] != -1)
     Level = RightNode[Level];
    else
    {
     Position = -1; // 设定为右树
     break;
    }
   }
   else
   {
    // 左树是否有下一阶层
    if (LeftNode[Level] != -1)
     Level = LeftNode[Level];
    else
    {
     Position = 1; // 设定为左树
     break;
    }
   }
  }

  if (Position == 1) // 建立节点的左右连结
   LeftNode[Level] = i; // 连结左子树
  else
   RightNode[Level] = i; // 连结右子树
 }

 // ---------------------------------------------------------
 // 二叉查找法
 // ---------------------------------------------------------
 public static int BinarySearch(int KeyValue)
 {
  int Pointer; // 现在的节点位置
  int Counter; // 查找次数

  Pointer = 0;
  Counter = 0;
  while (Pointer != -1)
  {
   Counter++;
   // 找到了欲寻找之节点
   if (TreeData[Pointer] == KeyValue)
    return Counter; // 传回查找次数
   else if (TreeData[Pointer] > KeyValue)
    Pointer = LeftNode[Pointer]; // 往左子树找
   else
    Pointer = RightNode[Pointer];// 往右子树找
  }
  return 0; // 该节点不在此二叉树中
 }
}


总结下:
一 线性查找
又称顺序查找,是从数组的第一个元素开始查找,直到找到待查找元素的位置,直到查找到结果。
最佳的状况时间是1 ,就是第一个就是待查找的远射,最差的查找状况是O(n),就是最后一个是待查找的元素。

二 折半查找
折半查找是将待查找的数组元素不断的分为两部分,每次淘汰二分之一,但是有个大前提是,元素必须是有序的,如果是无序的则要先进行排序操作,这种查找的方法,类似于找英文字典的Java,我们可以一下子找到字母J开头的,再仔细找。
最佳的状况时间是1,就是第一次分开就查找到了,最差的查找状态是O(n),便是待查找的数据出现在最后一次。

三 费氏查找
费氏查找主要是根据费氏数列1 1 2 3 5 8 13 ...... 来确定范围,然后再进行查找

四 插补查找
插补查找是一种类似折半查找的查找方法,插补查找是以比例的概念,求出待查找数据的可能位置,然后进行比较,如果该值比待查找的小,表示待查找的值可能出现在该值之前的范围,就这样一直缩小范围来确定最终的目标。 

五 二叉查找树
二叉查找树是先对待查找的数据进行生成树,确保树的左分支的值小于右分支的值,然后在就行和每个节点的父节点比较大小,查找最适合的范围。

这个算法的查找效率很高,但是如果使用这种查找方法要首先创建树。

   以上就是对查找算法的小小总结,在以后的应用中我们应该根据具体的问题具体分析,找到解决问题的最优解决方案。


原文网址:http://blog.csdn.net/myjava_024/archive/2008/11/20/3342539.aspx
分享到:
评论

相关推荐

    Java经典算法教程:二叉搜索树插入操作

    了解并掌握二叉搜索树的插入操作对于学习算法和数据结构至关重要。这个Java实现的插入方法简洁明了,易于理解。通过递归方式,我们可以高效地将新元素插入到合适的位置,保持二叉搜索树的有序性。这个教程提供的代码...

    二叉排序树问题

    在完成这个课程设计的过程中,学生不仅会掌握二叉排序树的核心概念,还能锻炼到数据结构的综合应用,包括算法设计、程序实现、文档编写和问题解决等多方面的能力。此外,通过实际操作,学生还会更加熟练地运用C语言...

    二叉排序树查找算法

    二叉排序树(Binary Search Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。二叉排序树的主要特点是:对于任意节点,其左子树中的所有...

    二叉查找树java

    二叉查找树(Binary Search Tree,BST)是一种特殊的二叉树数据结构,它具有以下特性:对于树中的每个节点,其左子树上的所有节点的值都...二叉查找树在实际应用中广泛用于数据库索引、文件系统以及各种算法实现中。

    平衡二叉排序树的算法实现

    2. **红黑树**:红黑树是一种自平衡的二叉查找树,由R. H. Sedgewick提出。它的每个节点都有颜色属性,可以是红色或黑色,满足以下性质:根节点是黑色;所有叶子节点(NIL节点)是黑色;如果一个节点是红色,则其子...

    java-binary-tree:二叉搜索树的简单实现

    这些平衡树算法在最坏情况下也能保持较好的时间复杂度。 此外,二叉搜索树还有其他一些高级操作,例如遍历(前序、中序、后序),求最大值、最小值,以及范围查询等。在Java中,可以使用递归或迭代的方式来实现这些...

    数据结构二叉排序树及其操作实验报告

    二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种特殊类型的二叉树,其每个节点的左子树只包含比其小的元素,右子树包含比其大的元素,且整个树保持自平衡。在本实验报告中,我们将深入...

    红黑树、二叉平衡树、二叉排序树的java实现

    本项目涵盖了三种重要的树形数据结构的Java实现:红黑树(RBTree)、二叉平衡树(AVLTree)以及二叉排序树(BSTree)。这些数据结构在处理大量数据时,能够提供高效的插入、删除和查找操作,广泛应用于数据库索引、...

    二叉查找树实现源码(C、C++、JAVA)

    在C、C++和Java这三种编程语言中实现二叉查找树,主要涉及以下几个关键操作: **插入操作:** - 首先,从根节点开始,比较新节点的键值与当前节点的键值。 - 如果新节点的键值小于当前节点,移动到当前节点的左子树...

    java课程设计二叉排序树

    二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构,它在处理搜索、插入和删除操作时具有较高的效率。在Java中,我们可以利用面向对象编程的概念来实现二叉排序树...

    java 实现二叉排序树 堆

    二叉排序树(Binary Sort Tree,BST),也称为二叉查找树或有序二叉树,是一种自平衡的二叉树数据结构。它在处理搜索、插入和删除操作时具有较高的效率,尤其对于有序数据。在二叉排序树中,每个节点的左子树只包含...

    Java 二分查找 算法

    以下是一个简单的 Java 二分查找算法示例: ```java public class BinarySearchDemo { public static int binarySearch(int[] array, int target) { if (array == null || array.length == 0) { return -1; } ...

    java 几种查找算法

    根据给定的文件信息,我们可以总结出几种在Java中实现的查找算法,这些算法是数据结构和算法领域的重要组成部分,广泛应用于各种计算机科学场景中。下面将详细解释这些算法及其在Java中的实现。 ### 顺序查找...

    java 二叉排序树与平衡二叉树的实现

    10. **algorithm**:可能是一个包含各种算法实现的文件夹,如二叉排序树和平衡二叉树的插入、查找和删除算法。 通过这个课程设计,学生将深入理解二叉排序树和平衡二叉树的概念,以及它们在实际问题中的应用,同时...

    DataStructuresAlgorithms:二叉查找树

    二叉查找树(Binary Search Tree,BST)是数据结构与算法领域中的一种重要树形数据结构,它在处理大量数据时能提供高效的插入、删除和查找操作。在二叉查找树中,每个节点包含一个键(key)、一个关联的值、一个指向...

    二叉排序树增删改查

    在iOS编程中,实现二叉排序树的增删改查操作是数据结构和算法的重要应用。CodeBlocks是一款跨平台的C++集成开发环境,虽然通常用于Windows,但它同样支持创建和调试Objective-C代码,这是iOS开发的主要语言。 ### ...

    用java实现得各种查找

    在Java编程语言中,查找算法是数据结构与算法领域中的重要组成部分。这些算法在处理大量数据时发挥着关键作用,帮助我们快速定位和获取所需的信息。本资源包含了一系列的Java实现,涵盖了多种查找技术,旨在帮助...

    Java基于二叉查找树实现排序功能示例

    三、Java基于二叉查找树实现排序功能 在本文中,我们使用了二叉查找树来实现排序功能。我们首先定义了一个BinaryNode类,用于表示二叉查找树中的节点。每个节点都包含一个键值和两个子节点,左子节点和右子节点。...

    Java和C语言实现各种经典算法

    5. 树结构:如二叉树操作(遍历、查找、插入和删除)、AVL树和红黑树等自平衡二叉查找树的实现。树结构在数据存储和检索中扮演重要角色。 6. 字符串处理:KMP算法、Rabin-Karp算法和Boyer-Moore算法等,这些都是...

    课程设计——二叉查找树

    如果是源代码,它可能用C++、Java或Python等编程语言编写,展示了二叉查找树的插入、删除和查找等基本操作的算法实现。如果是数据文件,它可能存储了预构建的二叉查找树,用户可以直接在程序中查看和操作这个树。 ...

Global site tag (gtag.js) - Google Analytics