2024年问AVL为何物,我愿称之为转转转_为什么avl树称为旋转(1),2024年最新持续更新大厂面试笔试题

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

AVL(自平衡二叉树)

AVL树的概念,AVL树的创建思想与算法步骤,AVL树的代码实现与分析展开阐述并图解分析

若有不足之处,欢迎指出

博主空间https://blog.youkuaiyun.com/JOElib?type=blog广度优先算法https://joelib.blog.youkuaiyun.com/article/details/124017974?spm=1001.2014.3001.5502多叉树与图https://joelib.blog.youkuaiyun.com/article/details/124042140?spm=1001.2014.3001.5502


目录

AVL树的概述🐼

为什么有AVL树🦁

BST的缺陷😶‍🌫️

AVL的优点 😶‍🌫️

何为AVL🦁

AVL的特征😶‍🌫️:

AVL树的创建思路与算法步骤🐼

图解😶‍🌫️:

代码实现与分析🐼

节点类中🦁

1.右旋的核心代码🐻

代码分析🐨:

2.左旋的核心代码🐻

代码分析🐨:

3.判断树高的核心代码(最难)🐻

代码分析🐨:

4.建立左高与右高的方法🐻

代码分析🐨:

5,创建一个添加节点的方法🐻

代码分析🐨:

AVL树类中🦁

6.对底层节点的方法调用即可🐻

代码分析🐨:

结论🐼


AVL树的概述🐼

为什么有AVL树🦁

BST的缺陷😶‍🌫️
  • 如果将一个有序列表构造成BST(二叉排序树)时,该树会变成一棵只有右子树或者只有左子树的二叉树,变相变成一个单向链表
  • 由于变成了单向链表,其检索效率大大降低,不能发挥BST的优势
  • 由于还要和左子树或者是右子树进行比较,检索效率可能比单向链表还低
AVL的优点 😶‍🌫️
  • 不存在只有左子树或者是右子树的情况,检索效率大大增大

何为AVL🦁

AVL的特征😶‍🌫️:
  • AVL树规定左子树与右子树的高度差不可以超过1,并且在左子树和右子树中.以他们为根节点的子树仍然是一颗AVL树

AVL树的创建思路与算法步骤🐼

  • 左旋思想与步骤
    • 创建一个新的节点,其权值等于原根节点的权值
    • 新节点的左子树等于原根节点的左子树
    • 新节点的右子树等于原根结点的右子树的左子树
    • 原根节点的权值等于其右子节点的权值
    • 原根结点的右子树等于其右子树的右子树
    • 原根结点的左子节点等于新节点
  • 右旋思想与步骤
    • 创建一个新的节点,其权值等于原根节点的权值
    • 新节点的右子树等于原根结点的右子树
    • 新节点的左子树等于原根结点的左子树的右子树
    • 原根结点的权值等于其左子节点的权值
    • 原根结点的左子树等于其左子树的左子树
    • 原根结点的右子节点等于新节点
图解😶‍🌫️:

右旋


代码实现与分析🐼

节点类中🦁

1.右旋的核心代码🐻

public void rightRotation() {
        var newNode = new Node(value);
        newNode.right = right;
        newNode.left = left.right;
        value = left.value;
        left = left.left;
        right = newNode;
    }
代码分析🐨:

略,按照算法步骤即可

2.左旋的核心代码🐻

    public void leftRotation() {
        var newNode = new Node(value);
        newNode.left = left;
        newNode.right = right.left;
        value = right.value;
        right = right.right;
        left = newNode;
    }
代码分析🐨:

略,根据算法步骤即可

3.判断树高的核心代码(最难)🐻

public int height() {
        return Math.max(left != null ? left.height() : 0,right != null ? right.height() : 0) + 1;
    }
代码分析🐨:
  1. 这里主要运用的思想是递归与回溯思想,利用递归,底层创建了许多的Math.max()
  2. 又根据谁调用,返回值给谁的原则,成就了该方法
  3. 以下是图解:

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

y-1715678241196)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值