判断二叉树是否AVL树

二叉搜索树 | 判断二叉树是否为AVL树 AVL Tree 判断要求 判断一个二叉树是否为AVL树 这个树是一个二叉搜索树binary search tree。 任意一个节点的两个子树的高度差不大于1。 关于第一点要求,请参考二叉搜索树 | 判断二叉树是否为二叉搜索树(二分查找树)Binary Search Tree ~~public class BinaryTree 也在文章中展示 关于第二点要求:解决思路是利用一个方法 public stati... 阅读详情

一、算法思想:
递归法判断一个二叉树是否平衡二叉树(AVL树),可以根据它的定义写出代码:(1)空树是一个AVL树;(2)只有一个根结点的树是一个AVL树;(2)左子树是一颗AVL树,且右子树是一个AVL树,且左子树的高度与右子树的高度差绝对值不超过1。

二、代码:

/*
name:
author:followStep
description:
date:2018/3/17 11:06:15
*/

//#define LOCALE
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <iostream>
using namespace std;

struct bnode{
    int data;
    bnode *lchild, *rchild;
};
typedef bnode *btree;

int get_deep(btree bt)
{
    if(bt == NULL)
        return 0;
    else if(bt->lchild == NULL && bt->rchild == NULL)
        return 1;
    else{
        int d1, d2;
        d1 = get_deep(bt->lchild);
        d2 = get_deep(bt->rchild);
        return d1 > d2 ? 1+d1 : 1+d2;
    }
}

bool is_avl(btree bt)
{
    if(bt == NULL)
        return true;
    else if(bt->lchild == NULL && bt->rchild == NULL)
        return true;
    else
        return is_avl(bt->lchild) && is_avl(bt->rchild) && 
            fabs(get_deep(bt->lchild)-get_deep(bt->rchild)) <= 1;
}

void init_btree(btree &bt)
{
    bt = (btree)malloc(sizeof(bnode));
    bt->lchild = bt->rchild = NULL;
}

bnode *new_bnode()
{
    bnode *bn = (bnode*)malloc(sizeof(bnode));
    bn->lchild = bn->rchild = NULL;
    return bn;
}

int main()
{
#ifdef LOCALE
    freopn(".in", "r", stdin)
    freopen(".out", "w", stdout)
#endif

    btree bt;
    init_btree(bt);

    bnode *bn1, *bn2, *bn3, *bn4, *bn5;
    bn1 = new_bnode();
    bn2 = new_bnode();
    bn3 = new_bnode();
    bn4 = new_bnode();
    bn5 = new_bnode();

    bt->lchild = bn1;
    bn1->lchild = bn2;
    bn1->rchild = bn3;
    bn2->lchild = bn4;
//  bn4->lchild = bn5;

    bool ans = is_avl(bt->lchild);

    cout << ans;

    return 0;
}
AVL树详解&面试题-判断一棵树是否是平衡二叉树 上次写了关于二叉搜索树的分析,但是二叉搜索树有一个缺陷,就是当插入一个有序(或接近有序)的序列时,二叉搜索树就相当于一个链表了,搜索效率会特别低。那么,如何来改进呢?这就引入了AVL树(高度平衡二叉树),那么下面我们一起来了解一下AVL树吧! AVL树的特征: 1、左右子树的高度差都不超过1; 2、左右子树都是AVL树; 3、每个节点都有一个平衡因子bf(blance fator ),其值为 阅读详情

相关推荐

nsight-system教程

参考nsight-compute使用教程-优快云博客。

youzjuer的博客 1894

判断树是否是AVL

方法一(不推荐) /** * 判断树是否是 AVL * 方法一: * 首先判断当前节点是否平衡(计算左右子树的高度),然后前序遍历所有的节点,判断每个节点是否平衡 * &lt;p&gt; * 缺点:计算当前节点的高度时,左右子树都全部被遍历了一遍。再判断左子节点是否平衡,计算高度,又会将左子节点的...

qq1169091731的博客 1468

上交开源装甲板识别代码分析

GitHub - xinyang-go/SJTU-RM-CV-2019: 上海交通大学 RoboMaster 2019赛季 视觉代码这里着重分析主函数main.cpp与装甲板识别部分的工程文件armer文件夹。由于未完全分析,所以对于其中log.h、options.h中的函数并不清楚,在分析时会跳过这些内容。该文章重点分析的是思路,部分函数中的数学逻辑、数据处理思路这里不详细解释(没能力)所有思维导图通过 知犀知犀思维导图 - 知犀官网 (zhixi.com)原创。

qq_42104961的博客 1320

判断一个二叉树是否是AVL树

点:二叉树 题意:判断一个二叉树是否是AVL树,即二叉树任意一个节点的左右子树深度之差不得大于1 剑指offer面试题39引申 思路:和算二叉树的深度一样,依然按后序,然后依次求深度,同时传入一个bool变量入函数栈,每个节点只要发现左右子树深度超过1,就可以说明已经不是avl树了。 在剑指offer中还有一种更高效的解法,它虽然也依赖树的深度,但不是以算深度为主导

u010246947的专栏 3504

SECS/GEM协议中的关键指令详解:从S1F1到S9F9的完整指南

本文详细解析了SECS/GEM协议中从S1F1到S9F9的关键指令,涵盖设备状态管理、控制诊断、报警处理等核心功能。通过实际案例和调试技巧,帮助开发者掌握半导体制造设备通信标准,解决SECS/GEM协议在实际工程应用中的通讯难题,提升生产线智能化水平。

weixin_26899659的博客 397

【文章阅读+代码复现】Point-GNN

Brief 在3D点云语义分割方法中,GNN已经做了很多可用的方案,但是在目标检测上依旧是采用比较传统的CNN和稀疏卷积的组合,这一篇文章是研究了图卷积在3D检测的中的用法。来自卡内基梅隆大学。已经被CVPR2020接收. 这里是 paper 这里是 code Abstruct 一个采用GNN设计的3D目标检测框架 过程是先将点云场景编码成图结构,随后设计了一个叫point-GNN的网络结构,在...

有所为,有所成长 1万+

如何判断一棵二叉树是否为二叉平衡树

判断是否为二叉平衡树

G_Dragon_boy的博客 585

大语言模型在建筑规范自动化合规审查中的微调策略与规模效应实践

大语言模型(LLM)通过在海量文本数据上预训练,具备了强大的语言理解和生成能力。其核心原理是基于Transformer架构,通过自注意力机制捕捉长距离依赖关系。在工程实践中,为了将这种通用能力适配到建筑、法律、金融等高度专业化的垂直领域,通常需要采用领域微调技术。微调通过使用特定领域的高质量指令数据对模型参数进行更新,使其掌握专业术语、逻辑规则和任务范式,从而解决通用模型在专业场景下知识匮乏和“幻觉”问题。结合检索增强生成(RAG)技术,将动态外部知识库作为模型的“参考手册”,能进一步提升事实准确性并降低幻

weixin_30667831的博客 364

C语言实现AVL树的判定问题

定义:AVL树是一种平衡二叉搜索树,AVL树有一个特点,所有节点的平衡因子不能大于1,即所有节点的左子树与右子树的深度差只能为-1,0,1。 思路:判断AVL树的思路很简单,只要判断是否是二叉搜索树,再判断是否带有平衡条件 ...

weiambt的博客 1414

鸿蒙录屏推流应用完整解决方案

本文介绍了鸿蒙录屏推流应用的完整解决方案。项目采用分层架构设计,包含录屏、编码、推流等功能模块,要求实现4小时稳定运行且延迟小于3秒。技术实现包括:1) 通过config.json配置应用权限和功能;2) 使用ScreenRecorderManager类管理录屏服务,实现视频采集、音频录制和编码参数配置;3) 核心功能包含初始化录屏器、开始/停止录屏等操作。该方案充分利用鸿蒙系统的多媒体API,实现了高性能的屏幕录制与实时推流功能。

huanghm88的专栏 291

Arcgis模型构建器01——写一个简单的模型

在使用模型构建器解决这个需求之前,我们要想清楚如果我们手动解决的话,应该如何去处理,因为构建模型的过程正是基于我们手动处理的过程来构建的。我有一个全国的dem影像数据和一个陕西省边界范围矢量,现在我想获取陕西省的dem影像的坡度数据。填写完之后点击确定,我们发现,两个输入数据和工具连接起来了,并且通过裁剪工具得到一个中间结果,即。我们发现工具框和中间数据框都存在阴影,说明已经运行过了这个模型,不报错就说明模型运行成功!现在我们就把数据和工具都串联起来了,成功构建好了模型。

爱吃雪糕的小布丁的博客 918

判断一颗二叉树是否为AVL树(Java)

如果左子树是AVL树,右子树是AVL树,他们的高度差小于等于1,那就是AVL树;否则不是. public class IsAVLTree { public static boolean isAVL(TreeNode root) { if (root==null) { return true; } int diff=Math.abs(getHeigt(root.lchild)-getHeigt(root.rchild)); if (isAVL(root.lchild)&&amp

weixin_45408048的博客 740

#systemverilog# 之 event region 和 timeslot 仿真调度(三)Verdi 辅助查看

通过今天的学习,我们知道:event region 是event sequence 的全集。我们打开了 event region feature 也就开启了event sequence 的功能。

那么菜的博客 1366

判断一颗二叉树树是否为AVL树

1)先判断该树是否为二叉排序树

pegasus10 1259

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

判断一棵二叉树是否为AVL树

思路:AVL树是高度平衡的二叉搜索树,这里为了清晰说明,分别判断是否为搜索树,是否为平衡树。 struct TreeNode { struct TreeNode *left; struct TreeNode *right; int key; }; //这里先判断是否为二叉搜索树,其次判断是否为平衡的 bool IsAVL(TreeNode *root,i...

weixin_34117522的博客 351

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Java数据结构】BST树(二叉搜索树)总结05(判断二叉树是否是BST树,AVL树)

二叉树总结:入口 二叉树的基本操作: 1、插入,删除 操作 2、前、中、后序遍历,层序遍历 3、求BST树高度,求BST树节点个数 4、返回中序遍历第k个节点的值 5、判断一个二叉树是否是BST树,判断一个BST树是否是AVl树 6、BST树的镜像 7、把BST树满足[begin,end]区间的值放在集合中、打印出来 8、判断是否是子树 9、按层打印二叉树 1、判断是否...

懂技术的猫 708

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

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

创建AVL树并判断是否为完全二叉树

第一行打印得到的AVL树的层次顺序遍历序列。所有数字都必须用空格隔开,并且行尾必须没有多余的空格。然后在下一行中,如果树为完全二叉树,则打印“Yes”;如果不是,则打印“No”。现在给定一个插入序列, 一个一个地将键值插入初始为空的AVL树中,输出得到的AVL树的层次顺序遍历序列,并判断它是否是一个完全二叉树。在AVL树中,任何节点的两个子树的高度最多相差1;如果它们高度相差不止1,则需要重新平衡以恢复这种属性。上述代码的主要功能是构建AVL树,并对其进行层次遍历和判断是否为完全二叉树。

m0_52951519的博客 319

(平衡二叉树 判断是否为AVL树 )leetcode110

平衡二叉树(avl)树意思是左右子树的最高深度相减<=0也就是abs(left - right) <=0。答:因为判断左右子树,只能在具有左右子树的父结点来进行。至于深度用index dfs的标记法来做。只要有一课子树不满足条件那就不是avl树。为什么用遍历用前序遍历?

2403_87140725的博客 250

【复试刷题】判断二叉树是否为AVL树(代码可运行)

题目描述 写出一个判断平衡二叉树的算法 注:AVL树既要满足BST、也要满足平衡,这里的平衡是每个节点都平衡,第一次写的时候只是看了整棵树的高度差,大错特错。 思路描述 使用二叉链表,深序遍历建立二叉树 分别计算二叉树每个节点的左右子树高度,同时判断是否满足左<根<右 最后abs(左-右)<=1即可 #include<stdlib.h> #include<stdio.h> typedef struct Node { int data; struct Nod

qq_45719936的博客 567

AVL树的插入+层次遍历+判断是否为完全二叉树板子

【代码】AVL树的插入+层次遍历+判断是否为完全二叉树板子。

AEliauk的博客 594

1123 Is It a Complete AVL Tree (30 point(s))(AVL树:构造AVL以及判断是否为完全二叉树)

题目链接 思路? ①还是参考《算法笔记的AVL部分,做了一些代码上的简化(相比于另一道题 ②完全二叉树的判断参考于这里 代码 using namespace std; #include<bits/stdc++.h> struct node { int data; node* left, * right; node(int d = 0) :data(d), left(NULL), right(NULL) {} }; int getheight(node* n) { return n ==

Abider2的博客 275

剑指offer(41):判断二叉树是否为平衡二叉树(AVL树)

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

smile4lee的博客 1879

数据结构之如何判断一棵二叉树是否是平衡二叉树(AVL树)

1. 二叉平衡树的概念    参见另一篇博客 2 如何判断一棵二叉树是平衡二叉树?    思路:        先编写计算二叉树高度的函数,然后再判断每个节点的左右子树是否相差1。    代码如下:  template //判断二叉树的高度 int DepthTree(BSTreeNode *pbs) { if (pbs==NULL) return 0; else {

三棵石头的博客 1155

【PAT】A1123 Is It a Complete AVL Tree【AVL树、完全二叉树】

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...

elegant coder 708
上一篇: Manacher算法求最长回文子串
EverydayIsLife
博客等级 码龄12年 9粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值