AVL-平衡二叉树的创建和遍历

AVL树的插入删除遍历等操作 AVL树的各种操作:包括插入 删除 遍历 平衡旋转等 立即下载

在此,主要介绍,AVL的创建,仅仅用层次遍历验证AVL树创建的正确性,想要详细了解,先序,中序,后序和层次遍历,请参考我之前的发布的一篇介绍遍历的博客---- https://blog.youkuaiyun.com/kz_java/article/details/88358491 建树->先序-中序-后序-层次遍历

#include<stdio.h>
#include<queue>
using namespace std;
//AVL 19-3-10
int i,N,num[10005];
struct node{
    int data,height;
    node* lchild,*rchild;
};
node* newNode(int x){
    node* Node=new node;
    Node->data=x;
    Node->height=1;
    Node->lchild=Node->rchild=NULL;
    return Node;
}
int getHeight(node*root){
    if(root==NULL)
        return 0;
    return root->height;
}
int getBF(node*root){
    return getHeight(root->lchild)-getHeight(root->rchild);
}
void updataHeight(node*root){
    root->height=max(getHeight(root->lchild),getHeight(root->rchild))+1;
}
void R(node*&root){
    node*temp=root->lchild;
    root->lchild=temp->rchild;
    temp->rchild=root;
    updataHeight(root);
    updataHeight(temp);
    root=temp;
}
void L(node*&root){
    node*temp=root->rchild;
    root->rchild=temp->lchild;
    temp->lchild=root;
    updataHeight(root);
    updataHeight(temp);
    root=temp;
}
void insert(node*&root,int x){
    if(root==NULL){
        root=newNode(x);
        return;
    }
    if(x<root->data){
        insert(root->lchild,x);
        updataHeight(root);
        if(getBF(root)==2){
            if(getBF(root->lchild)==1){
                R(root);
            }else if(getBF(root->lchild)==-1){
                L(root->lchild);
                R(root);
            }
        }
    }else{
        insert(root->rchild,x);
        updataHeight(root);
        if(getBF(root)==2){
            if(getBF(root->lchild)==1){
                L(root);
            }else if(getBF(root->rchild)==-1){
                R(root->rchild);
                L(root);
            }
        }
    }
}
node* Create(int data[],int len){
    node*root=NULL;
    for(int i=0;i<len;i++)
        insert(root,data[i]);
    return root;
}
void LayerOrder(node*root){
    queue<node*>q;
    q.push(root);
    while(!q.empty()){
        node*now=q.front();
        q.pop();
        printf("%d ",now->data);
        if(now->lchild)
            q.push(now->lchild);
        if(now->rchild)
            q.push(now->rchild);
    }
}
int main(){
    scanf("%d",&N);
    for(i=0;i<N;i++)
        scanf("%d",num+i);
    node*root=Create(num,N);
    LayerOrder(root);
    return 0;
}
EfficientNet中的MBConv模块详解:为什么它能如此高效? 本文深度解析了EfficientNet中的MBConv模块,详细介绍了其核心设计理念、效率优化技术和复合缩放理论。MBConv通过深度可分离卷积、倒残差结构和注意力机制三大关键技术,实现了计算效率与模型性能的平衡,成为高效网络结构设计的典范。 阅读详情

相关推荐

【KITTI数据集中Raw_Data数据标定文件中的参数关系解读】

上一节本人将KITTI Odometry数据集中的参数文件进行了解释。本节主要针对一些做融合slam的人,将Raw_Data数据标定文件中的参数按照自己的理解做如下阐述。其中,所讲之处如有错误,欢迎各位批评指正。

weixin_43389152的博客 1527

数据结构与算法之平衡二叉树(AVL)的插入、旋转以及遍历

平衡二叉树 (AVL,Balanced Binary Tree),简称平衡树 (AVL 树)-- 树上任一结点的左子树和右子树的高度之差不超过 1。 平衡二叉树的插入 假定有如下子树,{A}、{B}、{AR}、{BL}、{BR},且假定所有子树的高度为 H(或者你认为是 1 也可以)。如下图 即:A 的平衡粒子为 1,B 为 0,AR 无子树 现在:以 LL(左孩子的左子树) 插入,操作如下图: 此时:B 的子树高度为 H+1(已做 LL 操作),AR 不变,那 A 的平衡因子为 2 了。此时就成 A

five-five 1436

PPT+视频 | 详解智能营销增益模型(uplift model)

分享营销增益模型的原理和常见的建模及评估方法,并以淘票票智能票补为例介绍uplift model技术的实践经验。

阿里文娱技术 8628

数据结构-平衡二叉树AVL的增删与遍历

1、概念: 平衡二叉树(Balanced Binary Tree)具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。 1.1 平衡因子: 左子树的高度减去右子树的高度,及B = B左 - B右。由平衡二叉树的定义可知,平衡因子的取值只可能为0,1,-1。0:左右子树等高。1:左子树比较高。-1:右子树比较高 1.2 最小不平衡子树 ...

zongx的博客 386

loadStop的原因导致的SSUSP

Total内存值是可用来调度的可用内存,当前可用内存为 0M。 loadSched和loadStop的阈值是根据 Total 内存和节点内存来做限制的。 loadStop 50G,现在有大量作业SSUSP,说明之前某个时间点该节点内存可能有低于50G的时候,导致作业SSUSP,具体是否是这个原因引起的需要用 bjobs -l JobID 看下作业的详细信息。 如果是loadStop的原因导致的 SSUSP,根据loadStop设置的阈值,Total 值高于loadStop值后,将逐步恢复挂起的作业

Blueberry521的博客 668

Cesium中GLB模型加载

Cesium中GLB模型加载全解析:Primitive与Entities方法详解

m0_72030584的博客 3474

AVLTree遍历

AVL树(平衡二叉树):   AVL树本质上是一颗二叉查找树,但是它又具有以下特点:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为平衡二叉树。 * 前序遍历:对于当前节点,先输出该节点,...

开心就好 6830

基于AR和SLAM技术的商场智能导视系统技术原理详解

本文针对智慧商场室内导航需求,提出基于AR和SLAM技术的商场智能导视系统技术方案,实现了沉浸式导览体验并促进消费转化,助力商场运营升级。

维小帮定位导航的博客 1244

详细图解,二叉排序树的遍历、删除、插入,通过bf优化构建成平衡二叉树(avl树)的原理

二叉排序树的插入,遍历,删除。插入时通过bf优化构建成平衡二叉树(avl树)的原理

yadoufeng的专栏 2023

零基础吃透!Python爬虫实战:超详细爬取小红书图文,解析封面+标题+文案全流程

本文为零基础开发者提供小红书图文爬取全流程指南,针对动态加载、严格反爬等核心痛点,从环境配置到数据解析详细讲解。主要内容包括: 核心特性分析:动态加载机制需抓包获取真实接口,严格反爬依赖Cookie验证和请求头伪装 环境准备:Python 3.8-3.10环境,使用requests/beautifulsoup4等库,通过浏览器开发者工具获取有效Cookie 实战步骤: 定位关键API接口(note/list) 配置请求头(含Cookie/User-Agent/Referer) 实现分页爬取和异常处理 解析封

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 731

12、认知地图的建模与学习

本博客系统介绍了认知地图的定义、背景及其在机器智能领域的应用,重点探讨了模糊认知地图(FCMs)的建模方法与优势。文章还对比分析了几种主流的认知地图模型(如Axelrod模型、Kosko模型等),并讨论了模型的稳定性条件及实际应用前景。通过智能制造和医疗诊断的具体案例,展示了认知地图在复杂因果推理中的强大能力,并提出了模型优化方向与未来研究展望。

plant的博客 210

平衡二叉树的四种遍历方式

一、概念       平衡二叉树或者是棵空树,或者是具体下列性质的二叉查找树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度只差的绝对值不超过1。若将二叉树结点的平衡因子定义为该节点的左子树的高度减去它的右子树的高度,则所有结点的平衡因子只可能为-1,0,1。只要有一个结点的平衡因子的绝对值大于1,那么这棵树就失去了平衡。   简单例子 下图为平衡二叉树 下图为非平衡二叉树 ...

Kim_ 6025

中国各城市土地利用类型(城市功能)数据集(shp)

中国各城市土地利用类型(城市功能)数据集时间:2018年全国范围的城市用地类型数据(居住/商业/交通用地等共计11类)分类:居住用地、商业用地、工业用地、医疗设施用地、体育文化设施用地、交通场站用地、绿地等用地类型含城市编码、一级分类5个、二级分类11个1、上海市。

你好,我是小张同学! 1337

二叉排序树和平衡二叉树(AVL树)Java实现

二叉排序树 1、基本概念 1)二叉排序树BST:对于任何一个非叶子节点,要求其左子节点的值比当前值小,其右子节点的值比当前值大。 2)中序遍历二叉排序树会得到一个升序序列。 2、二叉排序树的创建 1)创建节点和二叉排序树 2)递归添加节点 3、二叉排序树的删除节点 0)预先判断:判断二叉排序树是否存在;判断删除节点是否存在 1)删除节点为叶子节点 (1)首先判断该叶子节点的父节点是否为空 (2)若为空,则说明删除节点为根节点,且根节点为叶子节点,即:二叉排序树只有一个根节点,将根节点置为空,即可删除。 (3

qq_40516377的博客 326

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

从1开始学Java数据结构与算法——树结构的实际应用(二):二叉排序树,平衡二叉树

从1开始学Java数据结构与算法——树结构的实际应用(一):堆排序、赫夫曼树、赫夫曼编码二叉排序树基本介绍二叉排序树的创建和遍历二叉排序树的删除 二叉排序树 基本介绍 二叉排序树BST:对于二叉排序树的任何一个非叶子节点,要求左子节点的值比当前节点的值小,右子节点的值比当前节点的值大。如果有相同值,可以将该节点放在左子节点或右子节点 二叉排序树的创建和遍历 二叉排序树的删除 ...

weixin_43851232的博客 440

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

平衡二叉树(AVL树)

平衡二叉树的引入 给一个数列{1,2,3,4,5,6},要求创建一颗二叉排序树(BST),并分析问题所在。 问题分析: 该二叉排序树的左子树全部为空,从形式上看更像一个单链表。插入与删除的速度不受影响,但是,查询的速度明显较低(因为要依次进行比较,每次还需要比较左子树),查询速度明显低于单链表。 解决方法:使用平衡二叉树(AVL树) 平衡二叉树的基本概念 1.平衡二叉树也称平衡二叉搜索树或者AVL树,可以保证查询效率较高。 2.平衡二叉树的前提是一个二叉排序树。 3.平衡二叉树的特点:它是一

weixin_53754024的博客 877

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

新人第一次发帖(平衡二叉树)

期末的数据结构课设,先是参考了网上示例的程序,按自己的功能要求,进行了一定的修改添加。 功能实现:创建平衡二叉树(通过调用添加函数);添加节点;查找节点;以中序显示树;销毁整颗树;退出程序。 下面附上代码:(在VC++6.0上运行) #include #include   typedef struct AVLTree { int Data;              //结构

may_and的博客 304

二叉树,二叉排序树,红黑树 学习

二叉排序树是一种比较有用的折衷方案。 数组的搜索比较方便,可以直接用下标,但删除或者插入某些元素就比较麻烦。 链表与之相反,删除和插入元素很快,但查找很慢。 二叉排序树就既有链表的好处,也有数组的好处。 在处理大批量的动态的数据是比较有用。 二叉树数据结构: typedef struct _BiTNode { int data; _BiT...

为民除害de专栏 106

平衡二叉树的创建

平衡二叉树的原理、左旋、右旋、平衡二叉树的建立

m0_74214501的博客 2285

C语言实现:树(Tree)二叉树(Binary Tree)二叉搜索树(BST)递归遍历(先序、中序、后序)平衡二叉树(AVL Tree)

树(Tree)是一种。当插入或删除节点导致。

小宝哥Code的专栏 810

4.5 平衡二叉树

4.5 平衡二叉树功能代码结果总结 功能 实现了左旋转,右旋转 实现了查看树的高度的方法 实现了创建一棵平衡二叉树的方法 代码 /** * AVL树:平衡二叉树 也被称为 平衡二叉搜索树, * 目的:保证较高的查询效率,方便查询搜索 * 特点:它是一棵空树 或 它的左右两棵子树的高度差的绝对值不超过1,并且左右两棵子树都是一棵平衡二叉树。 * 实现: * 构建一棵平衡二叉树 * (1) 左旋转:右子树高度大于左子树 * (2) 右旋转:左子树高度大于右子树 * 注意

dxt_snow的博客 194

java数据结构与算法(二叉排序树【BST】,平衡二叉树【AVL】)

Java数据结构与算法 二叉排序树(BST) 平衡二叉树(AVL)

qq_48627750的博客 907

C语言-实现顺序二叉树和平衡二叉树AVL

在实现二叉树之前先看下结构体的一些使用方法数组是保存一系列相同的数据。在实际问题中,一组数据往往有很多种不同的数据类型。例如,登记学生的信息,可能需要用到 char型的姓名,int型或 char型的学号,int型的年龄访问其中的各个元素,用结构成员运算符点(.)。即访问成员的一般形式是:结构变量名 . 成员名如 a.name 表示学生 a 的姓名。1)结构体的成员逐个赋值2)整体赋值也可以在初始化的时候赋值3)整体拷贝如上每次使用结构体均需要写struct,可以使用typedef 简化书写。

mike_jun的博客 1500

Java数据结构与算法-树结构实际应用Ⅲ(二叉排序树(BST)创建、删除,平衡二叉树(AVL))[day10]

树结构的实际应用 二叉排序树 二叉排序树(BST)的介绍 先看一个需求: 给你一个数列 (7, 3, 10, 12, 5, 1, 9),要求能够高效的完成对数据的查询和添加。 解决方案分析: 使用数组 数组未排序, 优点:直接在数组尾添加,速度快。 缺点:查找速度慢。数组排序,优点:可以使用二分查找,查找速度快,缺点:为了保证数组有序,在添加新数据时,找到插入位置后,后面的数据需整体移动,速度慢。 使用链式存储-链表 不管链表是否有序,查找速度都慢,添加数据速度比数组快,不需要数据整体移动

SwaeLeeUknow的博客 342

平衡二叉树的建立,插入

输入测试数据: 5410008140000 15 和 5410008140000 13 头文件:head.h 1 #ifndef HEAD_H_INCLUDE 2 #define HEAD_H_INCLUDE 3 4 #include <stdio.h> 5 #include <stdli...

weixin_34255055的博客 174
上一篇: 树的静态实现
下一篇: 常见服务以及对应的端口号
菜菜2022
博客等级 码龄9年 67粉丝 1033原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值