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

相关推荐

Python爬取腾讯视频m3u8加密流实战(附完整代码)

本文提供了一份详细的Python实战教程,指导如何通过抓包分析、模拟请求头与载荷,破解腾讯视频的m3u8加密流防盗链机制,并附上完整代码实现视频片段的下载与合并。教程涵盖从侦察到代码实现的完整流程,并包含参数动态化、多线程下载等高级技巧与避坑指南,旨在帮助开发者掌握流媒体下载的核心技术。

weixin_29090089的博客 1616

判断树是否是AVL

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

qq1169091731的博客 1468

MUJOCO+AUBO机械臂+强化学习+路径规划

最近在学习机械臂强化学习路径规划,参考了知乎教程。由于原教程较老(使用stable baselines3+panda-gym),新版本变化了,我略做调整,记录写在。上面这个教程用的是官方,环境封装较死(类似),最终基于重新开发。代码已开源至github:https://github.com/YellowThree-HS/mujoco-Aubo-RL-PathPlanning。

qq_63308550的博客 2044

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

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

u010246947的专栏 3504

PICO4 VR开发调试神器:用Live Preview Plugin实现电脑串流,告别反复打包烧录的繁琐流程

本文详细介绍了PICO4 VR开发中如何使用Live Preview Plugin实现电脑串流,显著提升开发效率。通过实时预览和调试功能,开发者可以避免反复打包烧录的繁琐流程,特别适用于Unity环境下的VR应用开发。文章涵盖环境配置、连接设置、实时调试技巧及性能优化方案,是PICO4开发者的必备指南。

weixin_34110970的博客 419

数字音频接口之I2S总线协议详解

1、SDATA,也就是串行数据信号,使用二进制传输数字信号。请注意数据的传输形式为补码的方式2、例如音频的采样率是8K,一s内存采样8K个点,一个点包含一个左声道,一个右声道,所以LRCK是8K,BCLK是2×采样频率×采样位数3、同时双向(TX和RX)音频流:串行数据同步移位到时钟信号SCK和LRCK。在SCK的下降沿将TX数据写入SDOUT引脚,并在SCK的上升沿从SDIN引脚读取RX数据。始终首先发送最高有效位(MSB);TX和RX均可在主模式和从模式下使用。

卓学课堂 3万+

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

判断是否为二叉平衡树

G_Dragon_boy的博客 585

YOLOv8改进策略【Neck】| CVPR 2024 MFM(Modulation Fusion Module,调制融合模块):动态特征加权融合,突出关键特征抑制冗余

本文主要利用DCMPNet中的 MFM 模块优化 YOLOv8 的目标检测网络模型。模块通过动态调制特征融合过程,实现了对多尺度、跨层级特征的智能聚合。将其应用于的改进过程中,针对目标检测中边界特征与语义信息的互补性需求,缓解网络中浅层细节与深层语义融合不足的问题。Depth Information Assisted Collaborative Mutual Promotion Network for Single Image Dehazing在图像去雾网络中,不同层级和类型的特征包含着互补的信息(如浅层的

Limiiiing的博客 351

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

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

weiambt的博客 1414

鸿宇多用户商城user.php RCE漏洞复现

鸿宇多用户商城 user.php 存在任意命令执行漏洞,攻击者可通过该漏洞在服务器端任意执行代码,写入后门,获取服务器权限,进而控制整个web服务器。

0xSec 1622

10、利用智能合约实现公平的私有集合交集

本文探讨了利用智能合约实现公平的私有集合交集(PSI)的多种协议,重点分析了协议 Π 和 Π∗ 的气体成本与性能特点。同时对比了包括 Justitia 和 Anesidora 在内的现有方案,突出了仅使用智能合约实现硬币补偿公平性的优势。文中还介绍了相关密码学基础、安全模型及隐私保障机制,为在不同应用场景下选择高效、安全的 PSI 协议提供了理论支持和实践指导。

linux的博客 97

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

智能温室:温室环境监测_(7).土壤监测技术包括pH值和电导率

土壤的pH值是指土壤溶液的酸碱度,它对植物的营养吸收和生长发育有着重要的影响。在智能温室中,土壤监测是非常重要的一个环节,因为土壤的pH值和电导率直接影响植物的生长和健康。本节将详细介绍如何利用传感器和数据处理技术来监测土壤的pH值和电导率,并提供具体的代码示例。在智能温室中,监测到的土壤pH值和电导率数据需要传输到中央控制系统进行进一步的处理和分析。通过以上步骤,您可以构建一个完整的智能温室土壤监测系统,实时监控土壤的pH值和电导率,确保植物在最佳的生长环境中。校准通常包括在已知电导率的标准溶液中进行。

zhubeibei168的博客 1408

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

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

pegasus10 1259

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

weixin_34117522的博客 351

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【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

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

余额充值