二叉排序树的查找性能(Java语言)

简介: 二叉排序树的查找性能(Java语言)

问题描述:

对给定查找集合建立一颗二叉查找树,考查在二叉排序树中进行查找的最好情况、最坏情况和平均情况。

基本要求:

  • 对给定的同一个查找集合,按升序和随机顺序建立两颗二叉排序树
  • 比较同一个待查值在不同二叉排序树上进行查找的比较次数
  • 对随机顺序建立的二叉排序树,输出查找的最好情况、最坏情况和平均情况。

以下代码仅供参考

以下代码仅供参考

以下代码仅供参考

/**
 *作者:魏宝航
 *2020年11月29日,下午20:20
 */
import java.util.*;
public class Main {
  public static int searchCount=0;
  public static void main(String[] args) {
    int[] arr1 = new int[] { 4, 7, 3, 2, 5, 12, 14, 23, 34, 21 };
    int[] arr2 =Arrays.copyOf(arr1, arr1.length);
    Arrays.sort(arr2);
    binarySortTree tree1 = new binarySortTree();
    binarySortTree tree2 = new binarySortTree();
    for (int i = 0; i < arr1.length; i++) {
      tree1.add(arr1[i]);
      tree2.add(arr2[i]);
    }
    levelOrder(tree1.root);
    levelOrder(tree2.root);
    search(tree1.root, 5);
    System.out.println("随机顺序二叉树查找次数:"+searchCount);
    searchCount=0;
    search(tree2.root, 5);
    System.out.println("升序二叉树查找次数:"+searchCount);
  }
  public static void levelOrder(Node root)
  {
    Queue<Node> list=new LinkedList<Node>();
    list.add(root);
    System.out.print("层序遍历:");
    while(!list.isEmpty())
    {
      Node temp=list.poll();
      System.out.print(temp+" ");
      if(temp.left!=null)
      {
        list.add(temp.left);
      }
      if(temp.right!=null)
      {
        list.add(temp.right);
      }
    }
    System.out.println();
  }
  public static void search(Node root,int key) {
    searchCount++;
    if(root==null) {
      return;
    }
    if(root.val==key) {
      return;
    }
    if(root.val<key) {
      search(root.right, key);
    }
    if(root.val>key) {
      search(root.left, key);
    } 
  }
}
class binarySortTree {
  Node root;
  int size;
  public binarySortTree() {
  }
  void add(int val) {
    if (root == null) {
      root = new Node(val, null);
      size++;
      return;
    }
    Node parent = root;
    Node temp = root;
    int cmp = 0;
    while (temp != null) {
      parent = temp;
      if (val < temp.val) {
        temp = temp.left;
        cmp = -1;
      } else if (val > temp.val) {
        temp = temp.right;
        cmp = 1;
      } else {
        return;
      }
    }
    if (cmp < 0) {
      parent.left = new Node(val, parent);
    } else {
      parent.right = new Node(val, parent);
    }
    size++;
  }
}
class Node {
  int val;
  Node left;
  Node right;
  Node parent;
  Node(int val, Node parent) {
    this.val = val;
    this.parent = parent;
  }
  Node(int val) {
    this.val = val;
  }
  public String toString() {
    return val + " ";
  }
}


目录
相关文章
|
2月前
|
缓存 算法 Java
Java 实现的局域网管控软件的性能调优
局域网管控软件在企业网络管理中至关重要,但随着网络规模扩大和功能需求增加,其性能可能受影响。文章分析了数据处理效率低下、网络通信延迟和资源占用过高等性能瓶颈,并提出了使用缓存、优化算法、NIO库及合理管理线程池等调优措施,最终通过性能测试验证了优化效果,显著提升了软件性能。
39 1
|
29天前
|
XML Java 数据库连接
性能提升秘籍:如何高效使用Java连接池管理数据库连接
在Java应用中,数据库连接管理至关重要。随着访问量增加,频繁创建和关闭连接会影响性能。为此,Java连接池技术应运而生,如HikariCP。本文通过代码示例介绍如何引入HikariCP依赖、配置连接池参数及使用连接池高效管理数据库连接,提升系统性能。
55 5
|
2月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
90 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
24天前
|
监控 Java API
如何使用Java语言快速开发一套智慧工地系统
使用Java开发智慧工地系统,采用Spring Cloud微服务架构和前后端分离设计,结合MySQL、MongoDB数据库及RESTful API,集成人脸识别、视频监控、设备与环境监测等功能模块,运用Spark/Flink处理大数据,ECharts/AntV G2实现数据可视化,确保系统安全与性能,采用敏捷开发模式,提供详尽文档与用户培训,支持云部署与容器化管理,快速构建高效、灵活的智慧工地解决方案。
|
1月前
|
SQL 安全 Java
安全问题已经成为软件开发中不可忽视的重要议题。对于使用Java语言开发的应用程序来说,安全性更是至关重要
在当今网络环境下,Java应用的安全性至关重要。本文深入探讨了Java安全编程的最佳实践,包括代码审查、输入验证、输出编码、访问控制和加密技术等,帮助开发者构建安全可靠的应用。通过掌握相关技术和工具,开发者可以有效防范安全威胁,确保应用的安全性。
49 4
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
31 4
|
1月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
31 1
|
2月前
|
存储 缓存 算法
提高 Java 数组性能的方法
【10月更文挑战第19天】深入探讨了提高 Java 数组性能的多种方法。通过合理运用这些策略,我们可以在处理数组时获得更好的性能表现,提升程序的运行效率。
35 2
|
2月前
|
Java 程序员 编译器
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。
在Java编程中,保留字(如class、int、for等)是具有特定语法意义的预定义词汇,被语言本身占用,不能用作变量名、方法名或类名。本文通过示例详细解析了保留字的定义、作用及与自定义标识符的区别,帮助开发者避免因误用保留字而导致的编译错误,确保代码的正确性和可读性。
56 3
|
2月前
|
移动开发 Java 大数据
深入探索Java语言的核心优势与现代应用实践
【10月更文挑战第10天】深入探索Java语言的核心优势与现代应用实践
86 4