判断二叉树是否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 ),其值为 阅读详情

相关推荐

别再手动上传了!用宝塔面板的‘Let‘s Encrypt’免费SSL证书,3分钟自动续期

本文详细介绍了如何利用宝塔面板的‘Let‘s Encrypt’功能实现SSL证书的自动申请和续期,3分钟完成配置即可永久免费使用。通过对比不同SSL证书方案,突出Let's Encrypt的免费、自动续期和高安全性优势,特别适合个人博客和中小企业官网。

weixin_30415113的博客 150

判断树是否是AVL

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

qq1169091731的博客 1468

sap外币重估流程图_SAP 外币评估方法(Valuation Method,评估方法)

在FI-GL模块评估外币时(T-code:F.05),需要输入ValuationMethod。下面分解一下评估方法是如何定义的。IMG -> FI -> General LedgerAccounting ->Business Transactions ->Closing ->Valuating -> ForeignCurrency Valuation ->...

weixin_39640543的博客 2356

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

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

u010246947的专栏 3504

BMS菊花链芯片怎么选?一张表对比ADI、TI、NXP五大厂家的隔离通信方案

本文深入对比了ADI、TI、NXP等五大厂商的BMS菊花链芯片隔离通信方案,涵盖技术演进、核心参数和场景化选型策略。通过实测数据和开发经验分享,帮助工程师在新能源汽车和储能系统中选择最优方案,提升通信可靠性和成本效益。

weixin_33724046的博客 433

图神经网络在金融风险传播分析中的应用

《图神经网络在金融风险传播分析中的应用》 摘要 本文旨在探讨图神经网络(Graph Neural Networks, GNN)在金融风险传播分析中的应用。首先,本文简要介绍了图神经网络的基本概念、发展历史以及其在各类应用场景中的重要性。接着,详细介绍了图神经网络的核心算法,包括图卷积神经网

AI天才研究院 1282

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

判断是否为二叉平衡树

G_Dragon_boy的博客 585

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

我哎GIS博客 819

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

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

weiambt的博客 1414

word多级列表为什么会变成黑块解决思路

今天在写文档时,发现WORD5级的标题都变黑块了,找了度娘的资料,终于解决了。 第一种 1、光标bai放在黑快的右边,按向左的箭头,然后ctrl+shift+s,点击重新应用。 2、点击“定义新的多级列表”(不知道从哪儿找这个按钮的百度下),直接点确定。 3、这里很重要!!!不要直接保存,而是直接关掉word,会提示保存还是不保存,这个地方再点击保存。 第二种 Word2016 使用宏代码修复方法 1.找到视图-宏,打开 查看宏 2.创建宏 3.贴...

霍力强的专栏 8581

CP AUTOSAR标准之AUTOSAR OS(AUTOSAR_SWS_OS)(二)

AUTOSAR OS是一个Operating System,即操作系统。它最核心的功能是管理任务和事件的调度,不同任务间的同步流,并且提供监控和错误处理功能。或者用最简化理解就是一个函数调度器。

CoolBreeze的博客 654

判断一颗二叉树是否为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

Vue3 - 详解播放m3u8视频流+HLS拉流推流完整方案,vue3如何播放m3u8格式文件实时视频播放教程(流媒体播放、直播视频流、实时摄像头监控视频流对接、后端服务器切片分片传输视频流边下边播)

vue3组件播放m3u8格式视频,实现hls流媒体监控摄像头实时播放,vue3播放m3u8视频流格式,实时直播画面视频流播放,摄像头监控画面推流,hls.js,Vue Video.js播放m3u8视频流格式,实现hls流媒体监控摄像头实时播放,vue中使用video.js播放m3u8格式的视频,m3u8格式视频,通过HLS协议播放m3u8格式视频,黑屏不显示怎么办,视频非常卡加载缓慢,拉流报错,推流报错,播放失败,播放监控m3u8视频流格式,苹果ios播放,vue3中使用video标签播放MP4,西瓜视频插

🏆 前端领域优质创作者 5941

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

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

pegasus10 1259

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

weixin_34117522的博客 351

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【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

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

创建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的博客 595

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、付费专栏及课程。

余额充值