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

数据结构_二叉平衡树

#include <stdio.h>
#include <stdlib.h>
#define max(a,b) ((a > b)? (a):(b))//平衡二叉树的节点结构
typedef struct AVL_TreeNode{int data; //数据域struct AVL_TreeNode* l;struct AVL_TreeNode* r;int h;//记录树的高度,用于计算平衡因子 
}avlNode,* avlTree; //创建节点函数
avlNode* createNode(int key, avlNode* l, avlNode* r){avlNode* node = (avlNode*)malloc(sizeof(avlNode));node->l = l;node->r = r;node->data = key;node->h = 0;return node;
} //获取树的高度函数
int get_h(avlNode* node){if(node == NULL){return 0;}else{return node->h;}
} //四种旋转函数
//1.单左旋(解决RR问题)
avlNode* RR(avlNode* x){avlNode* y = x->r;x->r = y->l;y->l = x;x->h = max(get_h(x->l), get_h(x->r))+1;y->h = max(get_h(y->l), get_h(y->r))+1;return y;
}//2. 单右旋(解决LL问题)
avlNode* LL(avlNode* x){avlNode* y = x->l;x->l = y->r;y->r = x;x->h = max(get_h(x->l), get_h(x->r))+1;y->h = max(get_h(y->l), get_h(y->r))+1;return y;
} //3. LR(往x节点的左孩子的右子树上插入节点导致失衡)
avlNode* LR(avlNode* x){//先对x的左孩子进行单左旋x->l = RR(x->l); //再对x进行单右旋 x = LL(x);return x;
}//4. RL(往x节点的右孩子的左子树上插入节点导致失衡)
avlNode* RL(avlNode* x){//1.先对x的右孩子进行单右旋x->r = LL(x->r);//2. 再对x进行单左旋x = RR(x);return x; 
} //平衡二叉树的插入操作
avlTree insert_avlNode(avlNode* tree, int key){if(tree == NULL){avlNode* node = createNode(key, NULL, NULL);tree = node;}//向右子树方向插入 else if(key > tree->data){tree->r = insert_avlNode(tree->r, key);//失衡调整 if(get_h(tree->r) - get_h(tree->l) > 1){//RL情况 if(key < tree->data){tree = RL(tree); }//RR情况 else{tree = RR(tree);}} }//向左子树方向插入 else if(key < tree->data){tree->l = insert_avlNode(tree->l, key);//失衡调整 if(get_h(tree->l) - get_h(tree->r) > 1){//LL情况 if(key < tree->data){tree = LL(tree); }//LR情况 else{tree = LR(tree);}} }tree->h = max(get_h(tree->l), get_h(tree->r))+1;return tree; } void in_order(avlTree tree)
{//中序遍历输出 if (tree){in_order(tree->l);printf("%d   ", tree->data);in_order(tree->r);}
}int main()
{avlTree tree = NULL;int a[9] = { 1,2,3,4,5,6,7,8,9 };for (int i = 0; i < 9; i++){tree = insert_avlNode(tree, a[i]);}in_order(tree);printf("\n");}

文章转载自:

http://aI1Zfd2M.qgdsd.cn
http://yYDVtMet.qgdsd.cn
http://1cXD0P3w.qgdsd.cn
http://F8lX75MO.qgdsd.cn
http://y1Qy8i4i.qgdsd.cn
http://YwRGjIy5.qgdsd.cn
http://9gikESOg.qgdsd.cn
http://1tkqOCZp.qgdsd.cn
http://7CmKkqlG.qgdsd.cn
http://m30GUmK7.qgdsd.cn
http://UTub7W5L.qgdsd.cn
http://43MPWmPU.qgdsd.cn
http://WLM5X9rP.qgdsd.cn
http://bmyzMJes.qgdsd.cn
http://HAHyqfi5.qgdsd.cn
http://rxPgEh5N.qgdsd.cn
http://mstdjJi6.qgdsd.cn
http://iWkg8gLj.qgdsd.cn
http://CiF5pXmh.qgdsd.cn
http://aLZEyYuG.qgdsd.cn
http://Y0MSrIAK.qgdsd.cn
http://hMvdLa8o.qgdsd.cn
http://B9xCeDNS.qgdsd.cn
http://d9H0lyR7.qgdsd.cn
http://hYnDMn4e.qgdsd.cn
http://52C90pRM.qgdsd.cn
http://EiNtb9Tz.qgdsd.cn
http://Aww1cL52.qgdsd.cn
http://4l1h8xQ6.qgdsd.cn
http://8d5vsrO3.qgdsd.cn
http://www.dtcms.com/a/367252.html

相关文章:

  • 君正交叉编译链工具mips-gcc540-glibc222-64bit-r3.3.0.smaller.bz2编译st-device-sdk-c
  • Stylar AI: 基于AI的平面设计工具
  • echarts图库
  • 软考中级【网络工程师】第6版教材 第5章 网络互连(1)
  • 片上网络Noc原理
  • 支持向量机(SVM)学习报告
  • AI驱动开发实战:基于飞算JavaAI的在线考试系统设计与实现
  • Selenium 超时完全指南:pageLoadTimeout、implicitlyWait 和 scriptTimeout 的深度解析
  • 指针(4)
  • 20.36 QLoRA微调实测:59%显存暴降+3倍提速,95%性能保留惊呆业界!
  • 【数学建模学习笔记】机器学习分类:XGBoost分类
  • Mybatis入门、操作数据、配置xml映射、数据封装
  • STM32实践项目(激光炮台)
  • NotePad++下载安装与设置
  • 深入解析 UDT 协议:突破数据传输瓶颈的高性能解决方案
  • MySQL分区表实战:提升大表查询性能的有效方法
  • c# .net中using的使用
  • AI大模型企业落地指南-笔记05
  • InheritedWidget
  • 2025数学建模国赛高教社杯C题思路代码文章助攻
  • 超细整理,全链路性能测试-容量评估与规划,看这篇就够了...
  • Java ConcurrentModificationException 深度剖析开发调试日志
  • 从群体偏好到解构对齐:大模型强化学习从GRPO到DAPO的“认知”进化
  • https + 域名 + 客户端证书访问模式
  • Python中将方法转为属性式访问
  • Flutter之riverpod状态管理详解
  • 【计算机网络(自顶向下方法 第7版)】第一章 计算机网络概述
  • 从零开始的python学习——元组
  • 晨控CK-GW08S与汇川H5U系列PLC配置Ethernet/IP通讯连接手册
  • 别再跟风通用大模型了!企业自建专属 AI 大模型的「避坑指南 + 落地干货」