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

AVLT

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node {int key;struct Node *left;struct Node *right;int height;
} Node;int max(int a, int b) {return (a > b) ? a : b;
}int height(Node *N) {if (N == NULL)return 0;return N->height;
}
Node* newNode(int key) {Node* node = (Node*)malloc(sizeof(Node));node->key = key;node->left = NULL;node->right = NULL;node->height = 1;return node;
}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;
}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;
}int getBalance(Node *N) {if (N == NULL)return 0;return height(N->left) - height(N->right);
}Node* insert(Node* node, int key) {if (node == NULL)return(newNode(key));if (key < node->key)node->left = insert(node->left, key);else if (key > node->key)node->right = insert(node->right, key);else return node;node->height = 1 + max(height(node->left), height(node->right));int balance = getBalance(node);if (balance > 1 && key < node->left->key)return rightRotate(node);if (balance < -1 && key > node->right->key)return leftRotate(node);// Left Right (LR) Caseif (balance > 1 && key > node->left->key) {node->left = leftRotate(node->left);return rightRotate(node);}if (balance < -1 && key < node->right->key) {node->right = rightRotate(node->right);return leftRotate(node);}return node;
}void preOrder(Node *root) {if(root != NULL) {printf("%d,", root->key);preOrder(root->left);preOrder(root->right);}
}int main() {char line[2048];char* token;Node *root = NULL;if (fgets(line, sizeof(line), stdin) == NULL) {return 1;}line[strcspn(line, "\n")] = 0;token = strtok(line, ",");while (token != NULL) {if (strlen(token) > 0) {int key = atoi(token);root = insert(root, key);}token = strtok(NULL, ",");}preOrder(root);printf("\n");return 0;
}

 

http://www.jsqmd.com/news/44566/

相关文章:

  • 推荐东城区婚姻律师:专业团队助力化解婚姻家庭难题
  • 一线操作工也能管能耗?MyEMS 的 “傻瓜式仪表盘”,把专业数据变成 “大白话”
  • 有哪些北京知名家事律师?专业领域服务解析
  • 数形结构转换工具类
  • Topic
  • 2025年【口碑好的/比较好的/靠谱的】工业级/国产化/变电站/变电站/电力/机房/光伏/远动/发电厂/工业级/嵌入式机柜/通讯管理机【公司/工厂/厂家】推荐/排行榜 哪家好/强/靠谱
  • 配置Jenkins代理节点的过程,将代理节点注册为服务
  • linux dns修改
  • linux dns 服务器 搭建
  • linux dmesg
  • 实用指南:Vue2 与 Vue3 父子组件参数传递全解析:从实例到原理
  • ES6(ECMAScript 2015)功能介绍,运用场景,对应机制点完整采用示例
  • 11.19_刷题有感
  • web框架——flask-1
  • 2025 年 11 月自动裁床厂家推荐排行榜,服装自动裁床,皮革自动裁床,工业自动裁床,智能数控自动裁床公司精选
  • AI眼镜外包团队:Rokid Glasses默认接入了通义大模型
  • 双指针的“适用边界”:从直方图最大矩形错误,看透三大经典问题的本质差异
  • SketchUp 坯子库插件从下载到使用全流程教程
  • webrtc弱网-AcknowledgedBitrateEstimatorInterface类源码分析与算法原理 - 详解
  • 注意力富集与女性优势
  • linux disable
  • linux dia
  • linux dhcp服务器配置
  • 一文讲清,生产质量管理的10大核心指标及公式
  • CSharp_Winform控件学习_Winform 上加ToolStrip时图标大小调整
  • 完整教程:反爬克星还是效率神器?Browser-Use+cpolar重构Web自动化逻辑
  • 价值原语的三角奠基:语言、行为与协议
  • Qt5支持手柄
  • ai学习机是不是智商税?到底有没有用?有推荐的品牌吗?
  • 两个商业插件改为开源插件