首页 > 编程语言 >JAVA之树的详解

JAVA之树的详解

时间:2023-06-21 13:11:52浏览次数:51  
标签:左子 黑色 JAVA 右子 之树 详解 遍历 左旋 节点

JAVA之树的详解

度:每一个结点的子节点数量

树高:树的总层数

根节点:最顶层的节点

左子节点:左下方的节点

右子节点:右下方的节点

二叉查找树

特点
  1. 每一个节点上最多有两个子节点

  2. 任意节点左子树上的值都小于当前节点

  3. 任意节点右子树的值都大于当前节点

添加节点规则
  1. 小的存左边

  2. 大的存右边

  3. 一样的不存

遍历
  1. 前序遍历:当前节点 左子节点 右子节点

  2. 中序遍历:左子节点 当前节点 右子节点

  3. 后序遍历:左子节点 右子节点 当前节点

  4. 层序遍历:一层一层的去遍历

 

平衡二叉树

规则:任意节点左右子树高度差不超过1

左旋

  1. 以不平衡的点作为支点

  2. 把支点左旋降级,变成左子节点

  3. 晋升原来的右子节点

  4. 以不平衡的点作为支点

  5. 将根节点的右侧往左拉

  6. 原来的右子节点变成新的父节点,并把多余的左子节点出让,给已经降级的根节点当右子节点

平衡二叉树需要旋转的四种情况
  1. 左左:当根节点左子树的左子树有节点插入,导致不平衡(一次右旋)

  2. 左右:当根节点左子树的右子树有节点插入(先局部左旋,再整体右旋)

  3. 右右:根节点右子树的右子树有节点插入(一次左旋)

  4. 右左:根节点右子树的左子树有节点插入(局部右旋,再整体左旋)

 

红黑树

  • 是一个二叉查找树

  • 但不是高度平衡的

  • 条件:特有的红黑规则

 

规则:
  1. 每一个节点是红色或黑色的

  2. 根节点必须是黑色

  3. 如果一个节点没有子节点或父节点,则该节点相应的指针属性值为NIL,这些NIL视为叶节点

  4. 两个红色节点不能相连

  5. 任意节点到所有后代叶结点的简单路径上,黑色节点数量相同

 

添加节点

默认颜色是红色效率高

 

根——>直接变黑色

 

|————>父黑色(不操作)

|

| |——>叔叔红色 1. 将父设为黑色,将叔设为黑色

非根 | 2. 将祖父设为红色

| | 3. 如果祖父为根,再将根变回黑色

| | 4. 如果祖父非根,将祖父设为当前节点再判断

| |

|————>父红色————>叔叔黑色(当前节点时父的右孩子)—>把父设为当前节点并左旋再进行判断

|

|——>叔叔黑色(当前节点是父的左孩子)—>1. 将父设为黑色

2.将祖父变为红色

3.以祖父为支点右旋

 

红黑树的增删改查性能很好

标签:左子,黑色,JAVA,右子,之树,详解,遍历,左旋,节点
From: https://www.cnblogs.com/longlonglong777/p/17495994.html

相关文章

  • JavaScript异步编程:异步的数据收集方法
    我们先尝试在不借助任何工具函数的情况下来解决这个问题。笔者能想到的最简单的方法是:因前一个readFile的回调运行下一个readFile,同时跟踪记录迄今已触发的回调次数,并最终显示输出。下面是笔者的实现结果。Asyncjs/seriesByHand.jsvarfs=require('fs');process.chdir('recipes'......
  • JavaScript版本的策略模式
    俗话说,条条大路通罗马。在美剧《越狱》中,主角MichaelScofield就设计了两条越狱的道路。这两条道路都可以到达靠近监狱外墙的医务室。同样,在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。如果没有时间但是不在乎......
  • JavaScript王国里的鸭子合唱团
    编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言。静态类型语言在编译时便已确定变量的类型,而动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。静态类型语言的优点首先是在编译时就能发现类型不匹配的错误,编辑......
  • Java SE和Java EE应用的性能调优
    凡事预则立,不预则废,和许多事情一样,Java性能调优的成功,离不开行动计划、方法或策略以及特定的领域背景知识。为了在Java性能调优工作中有所成就,你得超越“花似雾中看”的状态,进入“悠然见南山”或者已然是“一览众山小”的境界。这三个境界的说法可能让你有些糊涂吧,下面进一步解释......
  • Java乐观锁实现文章点击量、收藏计数、点赞计数
    Java乐观锁实现文章点击量、收藏计数、点赞计数......
  • 基于JAVA出差报销管理系统
    如今公司与企业规模不断扩大,出差管理在公司人事中的地位很重要。我们应该使用现代信息技术,研发基于Web技术的出差管理系统,这样可以节省人工管理成本,提高相关工作者的工作效率,推动公司与事业部的管理的信息化进程,进而进一步提升公司的核心竞争力。本文从公司/企业出差管理的实......
  • HiveSQL在使用聚合类函数的时候性能分析和优化详解
    概述前文我们写过简单SQL的性能分析和解读,简单SQL被归类为select-from-where型SQL语句,其主要特点是只有map阶段的数据处理,相当于直接从hive中取数出来,不需要经过行变化。在非多个节点的操作上,其性能甚至不比Tez和Spark差。而这次我们主要说的是使用聚合类函数的hiveSQL,这类SQL需......
  • CompletableFuture使用详解
    一、介绍简单的任务,用Future获取结果还好,但我们并行提交的多个异步任务,往往并不是独立的,很多时候业务逻辑处理存在串行[依赖]、并行、聚合的关系。如果要我们手动用Fueture实现,是非常麻烦的。CompletableFuture是Future接口的扩展和增强。CompletableFuture实现了Future接口,并......
  • Java学习之注册中心Zookeeper
    Zookeeper是什么ZooKeeper是一个用于维护配置信息、命名、提供分布式同步和提供组服务的集中式服务,它常作为一个注册中心服务用于分布式项目。Zookeeper拥有以下几个重要特性顺序一致性:来自客户端的相关指令会按照顺序执行,不会出现乱序的情况,客户端发送到服务的指令1->2->3->4,......
  • 【Java】使用 validation 完成自定义校验注解
    总括:validation让我们简化了开发过程,可以使用简单的一个注解就实现了很多常见的检验数据的功能,同时支持自定义注解。spring-boot-starter-validation是由SpringBoot整合的一套用于处理 validation的约定化自动配置启动器。Spring系列框架通过简单的安装依赖即可直接使用......