当前位置: 首页 > news >正文

做的好的音乐网站wordpress 图片库预览页面

做的好的音乐网站,wordpress 图片库预览页面,建设部设计院网站,我想做网络推广找谁目录 1. 普通二叉树结构 1.1. 常见术语 1.2. 完全二叉树 (Complete Binary Tree) 1.3. 满二叉树 (Full Binary Tree) 2. 特殊二叉树结构 2.1. 二叉搜索树 (BST) 2.1.1. BST 基本操作 - 查找 2.1.2. BST 基本操作 - 插入 2.1.3. BST 基本操作 - 删除 2.2. 平衡二叉树…

目录

1. 普通二叉树结构

1.1. 常见术语

1.2. 完全二叉树 (Complete Binary Tree)

1.3. 满二叉树  (Full Binary Tree)

2. 特殊二叉树结构

2.1. 二叉搜索树 (BST)

2.1.1. BST 基本操作 - 查找

2.1.2. BST 基本操作 - 插入

2.1.3. BST 基本操作 - 删除

2.2. 平衡二叉树 (AVL 树) 

2.2.1. 基本概念

2.2.2. 核心特性

2.2.3. 平衡操作(旋转)

2.3. 红黑树

2.3.1. 基本概念

2.3.2. 核心特性

2.3.3. 平衡操作

3. 总结


1. 普通二叉树结构

二叉树是计算机科学中最基础且重要的树形数据结构之一,非空时由根节点和两个不相交的子树(左子树和右子树)组成。树中每个节点(包括根节点)最多有两个子节点(称为左子节点和右子节点),普通二叉树无其他约束。

1.1. 常见术语
  • 根节点(Root):最顶层的节点

  • 叶子节点(Leaf):没有子节点的节点

  • 内部节点:至少有一个子节点的节点

  • 深度(Depth):从根节点到某一节点的边数

  • 高度(Height):从根节点到最深叶子节点的边数

  • 度(Degree):节点的子节点数(二叉树中最大为2)

1.2. 完全二叉树 (Complete Binary Tree)

定义:

完全二叉树是指除了最后一层外,其他各层节点数都达到最大值,并且最后一层的节点都连续集中在左侧的二叉树。

特点:

  • 可以不完全填满,但空缺只能出现在最后一层的最右侧

  • 高度为 h 的完全二叉树,节点数n满足:2^(h-1) ≤ n < 2^h - 1

  • 常用于堆的实现

  • 可以用数组高效存储(按层序遍历顺序存储)

示例:

        A/   \B     C/ \   /D   E F

1.3. 满二叉树  (Full Binary Tree)

定义:

满二叉树是指所有非叶子节点都有两个子节点,且所有叶子节点都在同一层的二叉树。

特点:

  • 每一层的节点数都达到最大值

  • 高度为h的满二叉树,节点总数为 2^h - 1

  • 叶子节点数 = 非叶子节点数 + 1

  • 严格平衡,是最"饱满"的二叉树形态

示例:

        A/   \B     C/ \   / \D   E F   G

我可以看到,满二叉树其实是完全二叉树的特例。

2. 特殊二叉树结构

2.1. 二叉搜索树 (BST)

定义:

对于树中的每个节点:

  • 左子树所有节点的值 小于 该节点的值

  • 右子树所有节点的值 大于 该节点的值

  • 左右子树也分别是BST

  • 没有键值相等的节点(通常定义)

特点:

  • 中序遍历BST会得到一个升序排列的元素序列

  • 查找效率取决于树的高度

  • 平均时间复杂度:O(log n)

  • 最坏情况(退化成链表):O(n)

示例:

2.1.1. BST 基本操作 - 查找
def search(root, val):if not root or root.val == val:return rootif val < root.val:return search(root.left, val)return search(root.right, val)
2.1.2. BST 基本操作 - 插入

def insert(root, val):if not root:return TreeNode(val)if val < root.val:root.left = insert(root.left, val)elif val > root.val:root.right = insert(root.right, val)return root
2.1.3. BST 基本操作 - 删除

三种情况处理:

  • 无子节点:直接删除

  • 一个子节点:用子节点替代

  • 两个子节点:用后继节点(右子树的最小值)或前驱节点(左子树的最大值)替代


def deleteNode(root, key):if not root:return Noneif key < root.val:root.left = deleteNode(root.left, key)elif key > root.val:root.right = deleteNode(root.right, key)else:if not root.left:return root.rightif not root.right:return root.left# 找右子树的最小节点temp = root.rightwhile temp.left:temp = temp.leftroot.val = temp.valroot.right = deleteNode(root.right, temp.val)return root

2.2. 平衡二叉树 (AVL 树) 

AVL树是最早发明的自平衡二叉搜索树,由G.M. Adelson-Velsky和E.M. Landis在1962年提出。

2.2.1. 基本概念

AVL树是一种严格平衡的二叉搜索树,它要求:

  • 每个节点的左右子树高度差(平衡因子)的绝对值不超过1

  • 如果插入或删除操作导致平衡因子绝对值大于1,则通过旋转操作重新平衡

2.2.2. 核心特性
  1. 平衡因子(Balance Factor)

    • 对于任意节点,平衡因子 = 左子树高度 - 右子树高度

    • 合法值:-1、0、1

  2. 高度平衡

    • 保证树的高度始终为O(log n)

    • 查找、插入、删除操作的时间复杂度均为O(log n)

2.2.3. 平衡操作(旋转)

当插入或删除导致不平衡时,有四种旋转情况:

1. 左旋 (RR情况 - 右子树的右子树导致不平衡)

    A (平衡因子=-2)\B (平衡因子=-1)\C

旋转后:

      B/ \A   C

2. 右旋 (LL情况 - 左子树的左子树导致不平衡)

        A (平衡因子=+2)/B (平衡因子=+1)/C

旋转后:

      B/ \C   A

3. 左右旋 (LR情况)

    A/B\C

先对B左旋,再对A右旋:

    C/ \B   A

4. 右左旋 (RL情况)

  A\B/C

先对B右旋,再对A左旋:

    C/ \A   B
2.3. 红黑树

红黑树是一种广泛使用的自平衡二叉搜索树,它在1972年由Rudolf Bayer发明,被称为"对称二叉B树",后来由Leo J. Guibas和Robert Sedgewick在1978年完善并命名为红黑树。

2.3.1. 基本概念

红黑树通过以下规则保持平衡:

  1. 节点颜色:每个节点是红色或黑色

  2. 根节点:根节点必须是黑色

  3. 叶子节点:所有叶子节点(NIL节点,空节点)都是黑色

  4. 红色节点规则:红色节点的两个子节点都必须是黑色(即不能有连续的红色节点)

  5. 黑高一致:从任一节点到其每个叶子节点的所有路径都包含相同数目的黑色节点(称为"黑高")

2.3.2. 核心特性
  1. 近似平衡:虽然不如AVL树严格平衡,但能保证最长路径不超过最短路径的两倍

  2. 高效操作:插入、删除和查找操作的时间复杂度都是O(log n)

  3. 旋转次数少:相比AVL树,红黑树在插入和删除时需要的旋转操作更少

2.3.3. 平衡操作

1. 插入操作

  1. 按照二叉搜索树规则插入新节点(初始设为红色)

  2. 检查并修复红黑树性质:

    • 情况1:新节点是根节点 → 变为黑色

    • 情况2:父节点是黑色 → 无需处理

    • 情况3:父节点和叔节点都是红色 → 重新着色

    • 情况4:父节点红而叔节点黑(或不存在)→ 旋转+重新着色

2. 删除操作

  1. 执行标准BST删除

  2. 如果删除的是红色节点,性质保持不变

  3. 如果删除的是黑色节点,需要通过旋转和重新着色来修复性质

旋转操作

红黑树使用两种基本旋转(与AVL树类似):

  1. 左旋

        P              Q/ \            / \A   Q   →      P   C/ \        / \B   C      A   B
  2. 右旋

        P              Q/ \            / \Q   C   →      A   P/ \                / \
    A   B              B   C

3. 总结

我们可以看到 AVL 树和红黑树其实是二叉搜索树的变种。AVL 和 红黑树的代码相对比较复杂,涉及复杂的旋转问题。具体的代码,将在之后的博文里讨论。

http://www.dtcms.com/a/522627.html

相关文章:

  • 营销型网站的三元素企业网站的综合要求
  • 网站建设优化服务特色商城网站建设报
  • 周口网站制作成都公司注册流程及需要的材料
  • 宜宾网站建设工作室成都网站建设小程序
  • 如何用文档创建一个网站怎么下载html中的视频
  • 网站的公共头部怎么做wordpress神马提交
  • txt电子书下载网站推荐企业如何数字化转型
  • 网站建设客户沟通模块做网站公司找哪家公司
  • 平价建网站格翻译国外网站做原创
  • 做传销网站违法的吗北京网站设计公司兴田德润信任高
  • 大型网站制作公司德阳做网站的公司
  • 奉新网站制作建设一个网站引言
  • 工会网站建设管理工作总结在哪个网站订酒店做申根签证
  • 淘宝网站网页设计说明seo教学免费课程霸屏
  • 成都网站制作报价专注wordpress主题
  • 电子商务网站的建设流程图河南建设厅官网证件查询入口
  • 鹤山区网站建设苏州网站建设新手
  • 重庆荣昌网站建设费用深圳形象设计公司
  • 本人已履行网站备案信息自己做的网站如何放到微信
  • 本地的赣州网站建设动易网站开发的主要技术
  • 免费怎么制作公司网站软件开发工程师介绍
  • 网站建设售后服务费包括哪些泉州有专门帮做网站的吗
  • 内江网站怎么做seo南宁网站设计方法
  • 农产品网站建设策划方案wordpress设置文章期限
  • 焦作做微信网站多少钱商标注册证查询网
  • 怎么建立自己公司的网站企业网站营销解决方案
  • 怎么知道网站是什么语言做的南京logo设计公司
  • 如何做企业网站小程序wordpress首页分类标题
  • 郑州专业做网站虚拟主机网站建设实训总结
  • 温州建设集团招聘信息网站上海网站建设助君网络7