1.二叉树

注:图来自STL源码解析-侯捷

二叉树:每个节点包含一个左子节点,一个右子节点。左右子节点均可能为空。
二叉树基础

2.二叉搜索树

定义:任何节点满足:左节点值<本节点值<右子节点值
二叉树基础

性质:

  1. 从根节点一直找其左子节点,找到最后就是二叉搜索树的最小节点。
  2. 从根节点一直找其右子节点,找到最后就是二叉搜索树的最大节点。
  3. 插入、访问时间O(log n)
  4. 最坏情况访问时间为O(n),在若干次操作后二叉搜索树变成单边(全部在左节点或者右节点)

插入操作:
二叉树基础
删除操作:
二叉树基础
二叉树基础

3.平衡二叉树

平衡的定义:没有一个节点深度过大

  1. AVL树(Adelson-Velskii-Landis trees)
    定义:任何节点的左右子树高度最多差1
    节点插入:
    二叉树基础
    插入节点11后,破坏了AVL树的结构(18节点左子树高度为3,右子树高度为1,相差2>AVL树要求1),要调整根节点到插入点路径上深度最深的节点(平衡被破坏的节点) 上图所指的是节点18,因为节点14,12,11(深度比18更大)的平衡没有被破坏,即18是最深的平衡被破坏的节点。

    根据平衡被破坏可以分为四种情况:

    1. 插入点在最深的平衡被破坏的节点的左子节点的左子树上,简称左左
    2. 插入点在最深的平衡被破坏的节点的左子节点的右子树上,简称左右
    3. 插入点在最深的平衡被破坏的节点的右子节点的左子树上,简称右左
    4. 插入点在最深的平衡被破坏的节点的右子节点的右子树上,简称右右

    例如:上图:节点11位于节点18(平衡被破坏的最深节点)的左子节点14的左子树上,为左左。
    左左与右右属于外部插入,可以采用单旋转操作调整AVL树,左右与右左属于内部插入,可以采用双旋转操作调整AVL树

    //to be continue

    1. 单旋转
    2. 双旋转
  2. List item

相关文章:

  • 2021-12-12
  • 2021-10-28
  • 2021-06-24
  • 2021-12-21
  • 2021-10-22
  • 2021-12-20
猜你喜欢
  • 2021-08-13
  • 2021-10-09
  • 2022-01-02
  • 2021-09-14
  • 2022-01-15
相关资源
相似解决方案