【算法模板】AVL树建树模板(没有删除操作)

OJ模板 我们的目标是,4A, 4A, 4A !!! 文章目录图论基本数据结构链式前向星堆优化最短路径原生dijkstra最短路计数在有多条最短路的情况下, 寻找点权途经点权最大的最短路 图论 基本数据结构 链式前向星 数据结构定义 VN是题目指定的最大顶点数, EN是题目指定的最大边数 //---------------------链式前向星--------------------------... 阅读详情

 好不容易整理吸收了自己写的习惯 的AVL树建树模板,保存一下~


struct Node
{
    int value;
    Node *left,*right;
    Node(int v)
    {
        value=v;
        left=right=NULL;
    }
}*root=NULL;

//左旋和右旋的灵魂就是——新王交接,父承子业
//转一次的root,就是旧王,新王是他儿子
//转两次的root,他的儿子是转第一次的旧王,root自己是转第二次的旧王
//ll中左子无敌,rr中右子无敌
//lr中左子必死;rl中右子必死


Node* ll(Node *root)//插在左子树左边,是右旋——root是旧王,左子新王
{
    Node *son=root->left;//造反的新王
    root->left=son->right;//旧王贬官,交接
    son->right=root;//新王摸狗头
    return son;//返回新王
}
Node* rr(Node *root)//插在右子树右边,是左旋——root是旧王,右子新王
{
    //同上噢
    Node *son=root->right;
    root->right=son->left;
    son->left=root;
    return son;
}

//插在左子树的右边,是先左旋再右旋
//则root为旧王,但是root的左子却是左旋的旧王
Node* lr(Node *root)
{
    root->left=rr(root->left);//先左旋
    return ll(root);//再右旋

}

//插在右子树的左边,是先右旋再左旋
//则root为旧王,但是root的右子却是右旋的旧王
Node *rl(Node *root)
{
    root->right=ll(root->right);
    return rr(root);
}

//1、因为AVL树在插入过程中会进行旋转,
//所以对于任何root而言,其左右子树都可能发生旋转,并使得root的左右孩子更改
//所以要左右孩子要保持迭代更新
//2、旋转过程中,判断是否发生旋转,就是在高度差为2的root和root的孩子上,要求高
//综上所述要按照递归写法
int getH(Node *root)//得到节点高
{
    if(!root)return 0;
    int l=getH(root->left);
    int r=getH(root->right);
    return max(l,r)+1;
}
Node* insert(Node *root,int value)
{
    if(!root)root=new Node(value);
    else if(value<root->value)//左边
    {
        root->left=insert(root->left,value);//防止孩子旋转,物是人非
        if(getH(root->left)-getH(root->right)==2)//因为插在左子树,所以要旋转也是左子树变长了
        {
            if(value<root->left->value)//在左子树的左子树上,是ll
                root=ll(root);//新的王
            else
                root=lr(root);
        }

    }
    else //右边
    {
        root->right=insert(root->right,value);//防止孩子旋转,物是人非
        if(getH(root->right)-getH(root->left)==2)//因为插在右子树,所以要旋转也是右子树变长了
        {
            if(value>root->right->value)//在右子树的右子树上,是rr
                root=rr(root);//新的王
            else
                root=rl(root);
        }

    }
    return root;
}

void main()
{
    int j;
    cin>>n;
    loop(i,0,n)root=insert(root,j);
}

 

PTA树遍历问题解析与C++实现技巧 树遍历是数据结构与算法中的核心概念,主要包括前序、中序、后序和层序遍历四种基本方式。其原理是通过递归或迭代方式系统地访问树中每个节点,在算法设计和程序优化中具有重要价值。树遍历技术广泛应用于编译器设计、数据库索引、文件系统管理等场景。针对PTA平台特性,实现时需特别注意递归边界条件处理、非递归算法优化以及严格的输出格式控制。通过掌握这些基础遍历方法及其变种,可以有效解决各类树结构相关问题,提升算法竞赛和编程考试的解题能力。 阅读详情

相关推荐

从GESP真题解析二叉树核心算法:数组模拟与递归遍历实战

二叉树是数据结构与算法中的核心概念,它以节点和边构成的层次化结构,高效地支持数据的组织与检索。其基本原理在于每个节点最多拥有两个子节点,通过递归遍历(如前序、中序、后序)或迭代遍历(如层序)可以访问和处理所有节点。这一特性使其在搜索、排序、表达式求值等场景中具有极高的技术价值。在编程竞赛和等级认证(如GESP)的实战场景中,面对二叉树问题,**数组模拟**存储结构因其编码简洁、避免内存管理而成为高效选择,结合**递归深度优先搜索(DFS)** 计算深度等指标,能快速将理论转化为可运行的C++代码,解决从节点

weixin_30294295的博客 399

AVL树结构实现—高效算法的“平衡大师“

本文系统介绍了AVL树的结构特性与实现原理。AVL树作为平衡二叉搜索树,通过控制左右子树高度差不超过1来保持平衡,其查找、插入时间复杂度均为O(logN)。文章详细解析了AVL树的结点结构、查找、中序遍历等基础操作,重点阐述了插入操作的平衡因子更新规则和四种旋转调整策略(左单旋、右单旋、左右双旋、右左双旋)。通过代码实现和性能测试验证了AVL树的高效性,10万数据插入仅需0.1秒,查找仅79毫秒,树高保持在19层,充分展现了AVL树动态平衡的优势。

Lucis__的博客 975

avl树的判断与插入删除结点

对输入的avl树判断其是否为avl树,并在其上插入删除元素,并把二叉查找树转换为avl树

AVL算法实现

http://blog.youkuaiyun.com/programmingring/article/details/37969745

仗贱走天涯 567

AVL树算法的动态演示的设计与实现.pdf

《数据结构》 是计算机学科中一门十分重要的核心课程, 而对于算法的理解则是学好该课程的关键。为了使学生更好的理解算法, 作为对课堂教学的有益补充, 我们设计开发了 《AVL树算法的动态演示》 , 以帮助学生理解数据结构算法。本文通过对这种交互式动态演示的设计实现过程的详细描述, 着重讨论了 AVL树动态演示的算法实现。

在Jetson orin板卡上部署ocr模型遇到错误

摘要:安装ONNX Runtime GPU版本时遇到问题,直接pip install onnxruntime-gpu会报错。解决方案是从test.pypi.org下载对应的.whl文件(如ort_nightly-1.14.0...aarch64.whl),本地安装后还需降级NumPy版本(如pip install numpy==1.26),以解决NumPy版本兼容性问题。整个过程涉及三个关键步骤:下载正确架构的wheel文件、本地安装、调整NumPy版本。

xdxd3c的博客 1526

二叉树进阶(AVLTree)

二叉树进阶(AVL树)

m0_72873854的博客 259

Windows下用RKDevTool解包update.img的完整流程(含常见错误排查)

本文详细介绍了在Windows系统下使用RKDevTool工具解包update.img固件的完整流程。从工具准备、环境搭建到逐步解包操作,重点解析了输出文件结构,并提供了修改分区后重新打包的实战方法。文章还针对解包失败、打包错误等常见问题提供了详细的排查与解决方案,旨在帮助嵌入式开发者和爱好者高效完成固件分析与定制工作。

aa123的博客 715

JS 实现自平衡二叉查找树(AVL树)

该树的代码基本上是从我上篇文章 JS 实现二叉查找树 加入平衡因子,高度,旋转等 AVL 树的概念升级而来,写的过程中发现,思想就一个递归,细节就是递归处理操作的时候严不严谨,难点就是概念的理解的准不准确。

三月的船长 480

【Boost5】Boost变换器的输入电容

节点的电流有3个,一个是来自电源输入的,由于我们把Vin看成理想电源以及线路的电感的存在,它可以近似看作是恒定的电流源Iin,一个是流向输入电容Cin的电流Icin,另外一个节点是电感L电流IL。电容电流波形在整个开关周期内的平均值为0,充电和放电在一个周期中各占1/2,在图中充电部分面积和放电部分面积相等,那么在充电或放电的电荷量Q=I*t,从图中可以看出,在一个周期内电容电流变化量是ΔIL,那在电容在充电1/2T周期中电流的变化量是1/2ΔIL。输入电容上的ESR也会随着电流变化,影响输入电压的变化。

qq_43416206的博客 3348

无人机机场自动化巡检钢铁厂管廊技术方案

摘要:针对钢厂管廊人工巡检效率低、成本高等问题,提出5G+无人机自主巡检解决方案。该系统由智能机库、5G无人机、AI分析平台等组成,可实现自动起降、实时数据传输、缺陷智能识别等功能。无人机配备四合一云台相机,支持42分钟续航和复杂环境飞行,通过深度学习算法自动生成巡检报告。方案实施后可提升巡检效率3倍以上,降低人工成本和安全风险,实现全天候自动化巡检,为钢厂管廊安全管理提供智能化技术支持。(149字)

gxdhlg的专栏 1683

AVL数的建立

AVL数是一棵自平衡的二叉搜索树。数的每一个节点的左右子树高度差绝对值不能超过1. 如果某一个节点的左右子树的高度差绝对值等于2时,则二叉树需要自平衡操作: class BiTreeNode(): # 定义二叉树型节点 def __init__(self,val): self.data = val self.lchild = None self.rchild = None self.pa...

qq_31997185的博客 539

YOLO26 旋转框检测 OBB 技术:角度预测与解码优化

YOLO26旋转框检测技术通过CSL角度编码有效解决了OBB检测中的周期性问题。该技术采用5参数表示法(cx,cy,w,h,θ),在检测头中分别处理分类、回归和角度预测。核心创新点包括:1)使用高斯或三角窗口的CSL编码对角度进行平滑表示;2)通过加权平均解码角度,避免边界不连续问题。该方法在遥感、文本检测等需要精确方向信息的场景中表现优异,相比传统HBB框可提升定位精度30%以上,同时保持了YOLO系列的高效特性。

一键难忘的博客 521

PAT算法问题模板

这里写自定义目录标题常用语法for语句,范围forstl模板库vector​​​​​​​定义使用常见算法树1.前序和中序遍历建树Hash表1.平方探测法建表查询欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建...

CSlerner的博客 775

Doris实战——结合Flink构建极速易用的实时数仓

Doris实战——结合Flink构建极速易用的实时数仓

爱吃辣条的博客 8228

【异常】安装hermes-agent时Git克隆大仓库报错:error: RPC failed; curl 92 HTTP/2 stream 5 was not closed cleanly: CAN

摘要:本文分析了Ubuntu服务器执行Git递归克隆时出现的网络传输中断错误(HTTP/2流异常关闭、数据截断)。主要原因是网络限制、协议兼容问题和缓冲区不足。提供了四种解决方案:1)扩大Git HTTP缓冲区;2)切换为HTTP/1.1协议;3)采用浅克隆+分步拉取子模块;4)网络优化措施。重点推荐浅克隆分步拉取作为最有效方案,所有方法无需重启即可生效,可快速解决大仓库递归克隆失败问题。

奶爸的编程之路,也就一周冷个三天 670

平衡树初阶——AVL平衡二叉查找树+三大平衡树(Treap + Splay + SBT)模板【超详解】...

平衡树初阶——AVL平衡二叉查找树 一、什么是二叉树 1. 什么是树。 计算机科学里面的树本质是一个树状图。树首先是一个有向无环图,由根节点指向子结点。但是不严格的说,我们也研究无向树。所谓无向树就是将有向树的所有边看成无向边形成的树状图。树是一种递归的数据结构,所以我们研究树也是按照递归的方式去研究的。 2.什么是二叉树。 我们给出二叉...

weixin_34253126的博客 1612

把表的每一次改动都记下来:SAP 表变更日志 DBTABLOG/DBTABPRT 与 SCU3 全面解析

摘要:SAP系统提供了数据库表变更日志功能(SCU3/DBTABLOG),用于追踪关键配置表的变更历史。该功能通过profile参数rec/client和表级技术设置双重开关控制,能记录谁在何时修改了哪些数据。与业务变更凭证(CDHDR/CDPOS)和应用日志(SLG1)不同,表变更日志提供技术层面的审计线索,适用于快速定位生产事故中的异常数据变更。但需注意其限制:不支持超宽表和大批量变更,且可能引发性能问题。建议将表变更日志与业务变更凭证、应用日志结合使用,构建完整的审计追踪体系。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1690

PAT甲级 -- 1066 Root of AVL Tree (25 分)

An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is...

猪の成长日记 203

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

平衡二叉树(AVL)

平衡二叉树(Balanced Binary Tree)是二叉树的一个进化体,由于它是由G.M. Adelson-Velsky 和 E.M. Landis于1962年发明的,因此也被称为AVL树。AVL-Tree是指在一棵树中任意一个节点其左右子树的高度差最多为1。本文包含了平衡二叉树的插入删除和查找等。

给我一个和尚的博客 518

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

模板题型总结

一、根据前序、中序序列建立二叉树 1.根据前序、后序建立二叉树 思想:根据前序序列,在中序中找到 根节点 的位置,创建根节点,然后划分左右区间,向下递归,用 “递归区间” 作为终点判断条件。 核心:每一次递归只建立了一个根节点。 代码: node* createTree(int Pre[],int In[],int preL,int preR,int inL,int inR){ // 递归终点 if(preL > preR) return NULL; // 找到根节点的位置 int k

qq_43481884的博客 310

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++二叉树实现:从智能指针到工程实践,掌握数据结构与算法核心

二叉树是数据结构与算法中的基础概念,它以节点和边构成层次结构,通过递归或迭代实现高效的数据组织与访问。其核心原理在于每个节点最多有两个子节点,支持前序、中序、后序及层序遍历,在平衡状态下可实现O(log n)的搜索、插入与删除操作。这一特性使其在算法优化、内存管理及系统设计中具有重要技术价值,广泛应用于数据库索引、文件系统、编译器语法树及游戏场景管理等场景。本文聚焦于使用现代C++特性,如智能指针和移动语义,实现一个健壮、可复用的二叉树类,深入探讨内存管理、接口设计及工程实践中的常见问题与解决方案。

dianning8393的博客 458

二叉树算法完全指南:从递归思维到面试高手

为什么二叉树在算法面试中如此重要?递归思维的最佳训练场:二叉树的结构天然适合递归——每个子树都是一棵完整的树。学会二叉树,你就学会了递归。通往高级算法的必经之路:回溯、动态规划、分治算法,都建立在递归思维之上。二叉树是这些算法的“幼儿园”。考察数据结构理解的最佳载体:一棵树可以考你栈(非递归遍历)、队列(层序遍历)、哈希表(构建树)、甚至堆(完全二叉树)。二叉树不会,算法白学。int val;这本质是什么?这是C++对C语言结构体的增强版。int val;。

2601_95494915的博客 773

数据结构实战指南:从数组到图,掌握核心结构与算法思想

数据结构是计算机科学中描述问题、组织信息与设计解决方案的基础语言和工具箱。其核心原理在于通过特定的数据组织方式,如线性结构(数组、链表)、非线性结构(树、图)以及哈希映射,来高效地支持数据的存储、检索与操作。掌握数据结构的技术价值在于能够为算法提供高效的底层支撑,是进行性能优化、解决复杂工程问题的关键。在实际应用场景中,无论是实现一个LRU缓存、处理海量数据的Top K问题,还是进行微服务依赖分析,都需要根据核心操作(如快速查找、频繁增删、维护顺序)和数据关系来选择和组合恰当的数据结构。例如,哈希表提供了近

weixin_34326429的博客 410

树形数据结构刷题指南:高频题与核心算法解析

树形数据结构是算法学习中的核心内容,广泛应用于数据库索引、文件系统等领域。其核心原理包括递归遍历、DFS/BFS搜索策略以及动态规划在树结构中的应用。掌握树形数据处理能力可以显著提升解决复杂算法问题的效率,特别是在处理层级关系、路径优化等场景时。本文通过力扣高频真题,深入解析二叉树遍历的六种变体、树形DP问题模板等实用技巧,并分享递归改迭代的通用方法。针对算法面试中的平衡树应用、字典树特殊场景等进阶考点,提供可直接套用的代码模板和避坑指南,帮助开发者系统提升树形结构问题的解决能力。

congju3179的博客 605

二叉树算法精要与高频面试题解析

二叉树是数据结构与算法中的核心概念,采用节点与指针的层次化存储结构。其遍历方式(前序、中序、后序)通过递归或栈实现O(n)时间复杂度,在路径计算、树构造等问题中展现算法威力。特别在技术面试场景,二叉树题目占比超35%,路径总和、序列化等高频题型常结合Java面向对象特性考察。通过LeetCode真题实践,开发者能掌握Morris遍历等空间优化技巧,并应用于数据库索引等工程场景。

weixin_30644369的博客 284
上一篇: 爆刷PAT(甲级)——之【1123】 Is It a Complete AVL Tree (30 分)——AVL树建树+层次遍历+完全二叉树的判断
下一篇: 爆刷PAT(甲级)——之【1103】 Integer Factorization (30 分)——DFS+剪枝
仰天倀笑
博客等级 码龄10年 313粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值