Java 二叉树

在这里插入图片描述

数据结构(二叉树)

  • 节点:父节点地址值 值 左子节点地址值 右子节点地址值
  • 度:每一个节点的子节点数量
  • 树高:树的总层数
  • 根节点:最顶层的节点
  • 左子节点:左下方的节点
  • 右子节点:右下方的节点
  • 根节点的左子树:根节点左边的树
  • 根节点的右子树:根节点右边的树
    数据没有规律,难以查询

二叉查找树(二叉排序树、二叉搜索树)

特点:
	每一个节点个最多有两个子节点
	任意节点左子树上的值,都小于当前节点
	任意右子树上的值,都大于当前节点
弊端
	左右子树高度差过大(长短腿问题)

添加节点

规则:大的存左边,小的存右边,一样的不存

二叉树的遍历方式

前序遍历

从根节点开始:根左右

中序遍历

从最左边的节点开始:左中右

后序遍历

从最左边的节点开始:左右中

层序遍历

从根节点开始,一层层的遍历

平衡二叉树

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

旋转机制

规则一:左旋

确定支点:从添加的节点开始,不断的往父节点找不平衡的节点

  1. 以不平衡的的点作为支点
  2. 把支点左旋降级,变成左子节点
  3. 晋升原来的右子节点
    在这里插入图片描述在这里插入图片描述
  • 复杂的
    • 左旋的时候,原本的左子节点让出自己的位置,左旋结束后,作为已经降级节点的右子节点
      在这里插入图片描述
      在这里插入图片描述

规则二:右旋

  1. 以不平衡的的点作为支点
  2. 把支点右旋降级,变成右子节点
  3. 晋升原来的左子节点

需要旋转的四种情况

左左:当根节点的左子树的左子树有节点插入,导致二叉树不平衡
  • 一次右旋
左右:当根节点的左子树的右子树有节点插入,导致二叉树不平衡
  • 先进行局部左旋(不平衡支点的左子树),再进行整体右旋
右右:当根节点的右子树的右子树有节点插入,导致二叉树不平衡
  • 一次左旋
右左:当根节点的右子树的左子树有节点插入,导致二叉树不平衡
  • 先进行局部右旋(不平衡支点的右子树),再进行整体左旋

红黑树

  • 红黑树是一种自平衡的二叉查找树,是计算机科学中用到的一种数据结构
  • 1972年出现,当时被称为平衡二叉B树。后来,78年被修改为:红黑树
  • 它是一种特殊的二叉查找树,红黑树的每一个节点上都有存储位,表示结点的颜色
  • 每一个节点,可以是红或者黑
  • 红黑树不是高度平衡的,他的平衡是通过“红黑规则”进行实现的

红黑规则

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

在这里插入图片描述
在这里插入图片描述

红黑树添加节点

  • 默认颜色:添加节点默认是红色的 ,效率高
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只理智汪

你的鼓励就是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值