数据结构与算法-树结构-平衡二叉树-笔记整理《十七》

二叉排序树的弊端

比如给数列{1,2,3,4,5,6},创建一颗二叉排序树,会出现如下情况:
在这里插入图片描述

  1. 左子树为空,像一个单链表
  2. 插入速度没有影响,但是查询速度会降低,因为每次都需要比较左子树,比单链表的情况还慢
    这时候就需要平衡二叉树

平衡二叉树特点

  1. 平衡二叉树可以是一颗空树
  2. 左右子树的高度差不超过1,且左右两个子树都是平衡二叉树
左旋

如果二叉树右节点过长的话需要左旋
步骤如下:

  1. 创建一个新节点NewNode,值等于当前根节点的值
  2. 新节点的左子树设置当前节点的左子树:newNode.left=left
  3. 新节点的右子树,设置为当前节点的右子树的左子树:newNode.right=right.left
  4. 把当前节点的值置换为右子节点的值:value=right.value
  5. 把当前节点的右子树设置成右子树的右子树:right=right.right
  6. 把当前节点的左子树设置为新节点
    转换示例图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

右旋

如果二叉树左子结点过长的话需要右旋
步骤如下:

  1. 创建一个新的节点,值等于当前根节点的值
  2. 把新节点的右子树设置为当前节点的右子树
  3. 把新节点的左子树设置为当前节点的左子树的右子树
  4. 把当前节点的值换为左子结点的值
  5. 把当前节点的左子树设置为左子树的左子树
  6. 把当前节点的右子树设置为新的节点
    转换示例图:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

双旋

问题分析:

  1. 当符合有旋转条件时
  2. 如果它的左子树的高度大于右子树的高度
  3. 先对当前节点的左节点进行左旋转
  4. 再对当前节点进行右旋转即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值