数据结构(二叉树,二叉查找树,平衡二叉树及旋转机制)


在这里插入图片描述

树和二叉树

  • Node 节点
    • 父节点地址
    • 左子节点地址值
    • 右子节点地址值
    • 每一个节点的子节点数量
  • 二叉树
    • 任意节点的度<=2
  • 树高
    • 树度总层数
  • 根节点
    • 最顶层的节点
  • 左子节点
    • 左下方的节点
  • 右子节点
    • 右下方的节点
  • 根节点的左子树
    • 根节点左子节点和下面的所有节点
  • 根节点的右子树
    • 根节点右子节点和下面的所有节点

 

二叉查找树

  • 二叉树查找树,又称二叉排序树或者二叉搜索树
  • 特点
    • 每一个节点上最多有两个子节点
    • 任意节点左子树上的值都小于当前节点
    • 任意节点右子树上的值都大于当前节点
  • 添加节点的规则
    • 小的存左边
    • 大的存右边
    • 一样的不存

 

二叉树的遍历方式

在这里插入图片描述

前序遍历
  • 从根节点开始,按照当前节点,左子节点,右子节点的顺序遍历
    • 20 18 16 19 23 22 24
       
中序遍历
  • 从最左边的子节点开始,按照左子节点,当前节点,右子节点的顺序遍历
    • 16 18 19 20 22 23 24
       
后序遍历
  • 从最左边的子节点开始,按照左子节点,右子节点,当前节点的顺序遍历
    • 16 19 18 22 24 23 20
       
层序遍历
  • 从根节点开始一层一层的遍历
    • 20 18 23 16 29 22 24
       

二叉查找树的弊端

按照规则将下列节点添加到二叉查找树中:7 10 11 12 13

在这里插入图片描述

  • 查询效率太低(eg:查询13)

 

平衡二叉树

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

 

平衡二叉树的旋转机制

  • 规则1: 左旋
  • 规则2: 右旋
  • 触发时机:当添加一个节点之后,该树不再是一颗平衡二叉树

 

左旋

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

步骤A:

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

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

步骤B:

  • 以不平衡的点作为支点
  • 讲根节点的右侧往左拉
  • 原先的右子节点变成新的父节点,并把多余的左子节点让出,给已经降级的根节点当右节点
    在这里插入图片描述            在这里插入图片描述

 

右旋

同理

 

需要旋转的四种情况

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

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

右右
    • 当根节点右子树的右子树有节点插入,导致二叉树不平衡
    • 一次左旋
右左
    • 当根节点右子树的左子树有节点插入,导致二叉树不平衡
    • 先局部右旋,再整体左旋
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值