Java利用完全二叉树创建大根堆和小根堆

下面是详细讲解“Java利用完全二叉树创建大根堆和小根堆”的完整攻略。

创建大根堆和小根堆的概念

在创建堆的时候,需要将输入的数据元素想象成一颗完全二叉树。然后将这个完全二叉树转换为堆,转换之后的堆即为大根堆或小根堆。

大根堆:每个节点的值都大于或等于它的子节点值。

小根堆:每个节点的值都小于或等于它的子节点值。

创建大根堆和小根堆的步骤

  1. 将输入的元素插入到一个空的堆中,使之成为一个没有排序的堆,这时候堆顶元素为第一个被插入的元素。
  2. 从堆顶开始,对完全二叉树进行遍历。从当前节点向下一级移动时,找到其左右子节点中比当前节点值大/小的那个节点,与当前节点交换位置。
  3. 重复步骤2,直到所有的元素遍历完毕,此时堆顶元素即为最大值/最小值。

Java实现大根堆和小根堆的代码示例

下面给出两个代码示例,分别实现了大根堆和小根堆的创建过程。

大根堆示例代码

public void bigHeap(int[] data){
    for(int i=0;i<data.length;i++){
        int j=i;
        while(j>0){
            if(data[j]>data[(j-1)/2]){
                int tmp=data[(j-1)/2];
                data[(j-1)/2]=data[j];
                data[j]=tmp;
                j=(j-1)/2;
            }else{
                break;
            }
        }
    }
}

其中,data为输入的元素数组,代码中将其视为一颗完全二叉树,从树的底部开始往上遍历,每次比较当前节点与其父节点值的大小,如果当前节点值大于父节点,则交换位置,继续向上比较,否则停止。

小根堆示例代码

public void smallHeap(int[] data){
    for(int i = 0; i < data.length; i++){
        int j = i;
        while(j > 0){
            if(data[j] < data[(j-1)/2]){
                int tmp = data[(j-1)/2];
                data[(j-1)/2] = data[j];
                data[j] = tmp;
                j = (j-1)/2;
            } else{
                break;
            }
        }
    }
}

与大根堆的创建过程类似,此处将比较大小操作改为了当前节点小于父节点时交换位置。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java利用完全二叉树创建大根堆和小根堆 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Java集合之Map接口的实现类精解

    Java集合之Map接口的实现类精解 Map是Java集合框架中的一个接口,它提供了一种将键值映射到值的集合,每个键最多只能映射到一个值。常见的实现类有HashMap、TreeMap、LinkedHashMap等。在本篇文章中,我们将详细讲解Map接口及其实现类的特点、使用方法和示例。 Map接口特点 Map接口是用于存储“键-值”对的集合,其中的键和值都是…

    Java 2023年5月19日
    00
  • java 操作windows 共享目录方法介绍

    Java操作Windows共享目录方法介绍 Java是一种跨平台的编程语言,但在处理Windows操作系统上的共享文件和目录时,需要遵循特定的步骤。本文介绍Java操作Windows共享目录的方法,旨在帮助开发人员在处理共享目录时更加安全和高效地进行开发。 1. Windows共享路径的格式 在Java中,我们需要了解Windows共享路径的格式,以便正确访…

    Java 2023年5月24日
    00
  • 简单记录Cent OS服务器配置JDK+Tomcat+MySQL

    我来为您详细讲解如何简单记录CentOS服务器配置JDK+Tomcat+MySQL的完整攻略。 一、安装JDK 1. 下载JDK 从Oracle官网下载对应版本的JDK,然后将其复制到Linux服务器上。 2. 解压JDK 使用命令行解压JDK压缩包: tar -zxvf jdk-xxxx.tar.gz 3. 配置环境变量 将JDK添加到环境变量中,让系统能…

    Java 2023年5月19日
    00
  • Spring Boot+Jpa多数据源配置的完整步骤

    下面是Spring Boot+Jpa多数据源配置的完整攻略: 配置文件 首先需要在application.properties 或者 application.yml 配置文件中进行多数据源的配置。示例如下: # 数据源 1 spring.datasource.first.url=jdbc:mysql://localhost:3306/first_databa…

    Java 2023年5月20日
    00
  • SpringBoot项目实现关闭数据库配置和springSecurity

    SpringBoot是一个非常流行的Java Web开发框架,它具有易用、快速开发、健壮性好等优点。在一些场景中我们需要关闭数据库配置或者关闭Spring Security,下面就具体介绍一下如何实现: 关闭数据库配置 在一些场景中,我们并不需要使用数据库,比如开发一个展示页面的网站,这时我们就可以关闭数据库配置。 步骤一:排除数据库依赖 在pom.xml文…

    Java 2023年5月20日
    00
  • 关于Tomcat的服务器使用及说明

    关于Tomcat的服务器使用及说明 Tomcat是一款开放源代码的Web服务器,可用于运行Java Servlet和JavaServer Pages(JSP)等Web应用程序。在本篇攻略中,我们将详细讲解如何使用Tomcat服务器并说明一些基本概念和操作步骤。 下载和安装 首先,您需要从Tomcat官网(http://tomcat.apache.org/)下…

    Java 2023年6月16日
    00
  • 让Java后台MySQL数据库能够支持emoji表情的方法

    当我们在Java后台使用MySQL数据库时,有时需要支持emoji表情。但是MySQL默认情况下是不支持emoji的,所以我们需要进行一些配置和操作来使其支持。 以下是支持emoji表情的完整攻略: 步骤一:修改MySQL的字符集 MySQL数据库默认使用的是utf8字符集,而utf8字符集只支持一部分的Emoji表情。当我们想要支持完整的Emoji表情时,…

    Java 2023年5月20日
    00
  • Java使用DateFormatter格式化日期时间的方法示例

    当我们在Java编程中需要处理时间相关的数据时,经常需要进行日期时间的格式化。Java中提供了DateFormatter类来进行日期时间的格式化,本文将详细讲解使用DateFormatter格式化日期时间的方法示例。下面按照以下步骤进行讲解: 1. 创建DateFormatter对象 在使用DateFormatter格式化日期时间之前,首先需要创建一个Dat…

    Java 2023年5月20日
    00
合作推广
合作推广
分享本页
返回顶部