面向对象——二叉树

本文介绍了二叉树的基础知识,包括二叉查找树和平衡二叉树的规则及旋转操作。接着深入探讨了红黑树的概念,强调了其在保持平衡方面的独特红黑规则,并讲解了添加节点的操作。最后提到了哈希值及其在对象标识中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

目录

一、二叉树

1、二叉树概述 

2、 二叉查找树

3、平衡二叉树 

1、平衡二叉树规则 

 2、平衡二叉树-左旋

3、平衡二叉树-右旋

 二、红黑树

 1、红黑树概述

2、红黑规则 

1、添加节点 

三、哈希值


一、二叉树

1、二叉树概述 

在树结构中,每一个元素称之为:节点;在二叉树中,每一个节点的子节点称之为度,二叉树的度小于等于2;

2、 二叉查找树

二叉查找树,又称二叉排序树或二叉搜索树;

  • 每一个节点上最多有两个子节点
  • 左子树上所有节点的值都小于根节点的值 
  • 右子树上所有节点的值都大于根节点的值

二叉查找树添节点规则:小的存左边,大的存右边,一样的不存;

3、平衡二叉树 

1、平衡二叉树规则 

  •  二叉树左右两个子树的高度差不超过1
  • 任意节点的左右两个子树都是一颗平衡二叉树

 

 2、平衡二叉树-左旋

  •  触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树
  • 逆时针旋转
  • 右子节点变成父节点(根节点)
  • 原先的根节点降级变成左子节点
  • 将多余的左子节点出让,给降级的节点作为右子节点

3、平衡二叉树-右

  •  触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树
  • 顺时针旋转
  • 左子节点变成父节点(根节点)
  • 原先的根节点降级变成右子节点
  • 将多余的右子节点出让,给降级的节点作为左子节点

 二、红黑树

 1、红黑树概述

  •  平衡二叉B树
  • 每一个节点可以是红或者黑
  • 红黑树不是高度平衡的,它的平衡是通过“自己的红黑规则"进行实现的

2、红黑规则 

红黑树不是高度平衡的,它的平衡是通过"红黑规则"进行实现的 

  1. 每一个节点或是红色的,或者是黑色的 ;
  2. 根节点必须是黑色;
  3. 如果一个节点没有子节点或者父节点,则该节点相应的指针属性值为Nil,这些Nil视为叶节点,每个叶节点(Nil)是黑色的;
  4. 如果某一个节点是红色,那么它的子节点必须是黑色(不能出现两个红色节点相连的情况);
  5. 对每一个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点;

1、添加节点 

  •  添加的节点的颜色,可以是红色的,也可以是黑色的
  • 红色效率高

 

三、哈希值

  • public int hashCode​():返回对象的哈希码值 
  • 同一个对象多次调用hashCode()方法返回的哈希值是相同的
  • 默认情况下,不同对象的哈希值是不同的。而重写hashCode()方法,可以实现让不同对象的哈希值相同
package com.gkl.test;

import com.gkl.service.TranslateTool;


public class MainTest {
    public static void main(String[] args) {
        TranslateTool translateTool=new TranslateTool();
        TranslateTool translateToolSecond=new TranslateTool();
//多次调用同一对象的hashCode()方法的哈希值是一样的
        System.out.println(translateTool.hashCode());
        System.out.println(translateTool.hashCode());
//调用不同对象的hashCode()方法的哈希值是不一样的
        System.out.println(translateToolSecond.hashCode());
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值