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

数据结构(7.3_2)——平衡二叉树

平衡二叉树,简称平衡树(AVL树)----树上任一结点的左子树和右子树的高度之差不超过1.

结点的平衡因子=左子树高-右子树高

ff7fbc47df9d407e96c9e07c3886140d.png

//平衡二叉树结点
typedef struct AVLNode {
    int key;//数据域
    int blalance;//平衡因子
    struct AVLNode* lchild, * rchild;
}AVLNode,*AVLTree;

平衡二叉树的插入 

在二叉排序树中插入新结点后,如何保持平衡?5c25f318bc694f52906c9d4da28e2248.png

调整最小不平衡子树 

36ed0b9adffe4c8ebe238f88b03fcd60.png

LL:

c15568bd62344ecabc7f765d62c3c730.png

RR:  

e46911bd532e4e0184906f197d94298e.png

 

LR: 

172292954a42449f91953cd177b04088.png

aa57e7f1b19a4881871fb98012c15877.png RL: 

67a15a1ca2f941a4aa973e300e0ffb45.png580795dd96ab4d65a6e7ae60c05c6196.png

 936473e6e48d467180866ecf30026792.png

 代码思路: 

右旋转:

4251e39b493a448683f202cdc83b003f.png

 

 

// 右旋转
Node *rightRotate(Node *y) {
    Node *x = y->left;
    Node *T2 = x->right;

    // 执行旋转
    x->right = y;
    y->left = T2;

    // 更新高度
    y->height = max(height(y->left), height(y->right)) + 1;
    x->height = max(height(x->left), height(x->right)) + 1;

    // 返回新的根节点
    return x;
}

 

左旋转:

52b8f71615524eb584e4ca1b740804f6.png

// 左旋转
Node *leftRotate(Node *x) {
    Node *y = x->right;
    Node *T2 = y->left;

    // 执行旋转
    y->left = x;
    x->right = T2;

    // 更新高度
    x->height = max(height(x->left), height(x->right)) + 1;
    y->height = max(height(y->left), height(y->right)) + 1;

    // 返回新的根节点
    return y;
}

 

 

汇总:

 fbb1d0abd36346f99022af083c599dc0.png

填坑:

129864ad7f8644bf8838b3bc278bbe66.png

411e0b082d5c4cbcab9dde6bb23ad355.png

7330e9e0cec44d27818ad0444d6d1869.png c9a7f3979aa048eba5778a6355486426.png

练习:

1、

 857bb595485c4c4faaddb25a63993d6f.png

f3834b32dc62499fabd8d7a103d22213.png

2、

b8abf826e6bf40ff823797360bf8cd3c.png

31ed0d6406c346bd81d461a93bdbed11.png

f79fb5a7a1cd4e0aae2cf0413aa35161.png 3、

9f1ed596a91d44018e667c4d5e7003e1.png

ce7fcbe4f8b248158493cb70af2d0caa.png

查找效率分析 

c7377541b9f242cb890c390fb37bfb2d.png

总结:

cd41b3b2cb7848d2ba024db46d19dbcf.png

 


http://www.kler.cn/news/307933.html

相关文章:

  • iOS 18 适配 Xcode 16 问题
  • 线性代数(宋浩版)(4)
  • 基于Java、SpringBoot、Vue的加油站管理系统设计
  • 【Lua学习】Lua最最基础的
  • Hugging Face NLP课程学习记录 - 0. 安装transformers库 1. Transformer 模型
  • STM32+FATFS+SD卡+RTC(生成.CSV格式文件)
  • 代码随想录_刷题笔记_第一次
  • Invoke-Maldaptive:一款针对LDAP SearchFilter的安全分析工具
  • 文生视频算法
  • SprinBoot+Vue便民医疗服务微信小程序的设计与实现
  • 基于SpringBoot+Vue+MySQL的在线视频教育平台
  • OpenGL(四) 纹理贴图
  • Linux基础---10进程管理
  • YOLOv10:深度剖析与应用前景展望
  • 文章资讯职场话题网站源码整站资源自带2000+数据
  • python之排列组合1
  • 拓扑学和低维拓扑保护
  • 其他图嵌入方法(6)
  • 鸿蒙开发入门day19-使用NDK接口构建UI(二)
  • MFC工控项目实例之十七添加手动测试界面
  • Spring Boot-Swagger相关问题
  • Docker容器技术1——docker基本操作
  • 机器学习算法与Python实战 | 概率、统计学在机器学习中应用:20个Python示例(建议收藏!)
  • 宝塔面板优化:提升服务器性能的实用指南
  • cv2.bitwise_or 提取ROI区域
  • C++ char*和char[] 可能指向的内存区域详解(附实验)
  • 使用随机森林模型在digits数据集上执行分类任务
  • 基于鸿蒙API10的RTSP播放器(三:底部视频滑轨进度显示)
  • 基于python+django+vue的学生管理系统
  • Python 课程13-机器学习