首页 > 其他分享 >平衡二叉树

平衡二叉树

时间:2023-06-09 23:22:11浏览次数:34  
标签:结点 删除 二叉 插入 二叉树 平衡

 1、平衡二叉树(AVL):它或者是一颗空树,左子树和右子树的深度之差不超过,且他的左子树和右子树都是一颗平衡二叉树

2、平衡二叉树出现的原因:平衡二叉树就是在二叉排序树(BST)引入的,就是为了解决二叉排序树的不平衡性导致时间复杂度大大下降,AVL就保持住了BST的最好时间复杂度O(logn),所以每次插入和删除都要确保二叉树的平衡,很好的解决了二叉查找树退化成链表的问题,把插入查找删除的时间复杂度最好情况和最坏的情况都维持在了O(logn),但是频繁旋转会使插入和删除牺牲掉O(logn)左右的时间,相对二叉查找树来说,时间上稳定了很多。

3、平衡二叉树默认左孩子的值比双亲节点小,右孩子的值比双亲节点大(这句话也很重要)。由此在插入或者删除结点时,如何调整二叉树为平衡二叉树?这里就有四种情况

  1、去判断每个结点的平衡因子,为2的结点要移动,如果一棵树有两个结点平衡因子都为2,移动下面的那个结点(这句话很重要)

  LL:首先这个图的大小排序你能分辨出来吗:T1<Z<T2<X<T3<Y<T4(如果能分辨出来,以下内容你将会很好理解)

    这是所谓的左左结构:x<y x>z 所以不平衡时把x放在中间,T3>X T3<Y 所以T3应该放在X的右边,Y的左边

    

 

  LR:一样的道理z>x z<y 所以Z应该放在x、y的中间,T2>x T2<z; T3>zT3<y

             

  RR:x放在y和z的中间,T3<x,T3>y

                

  RL:  Z<X Z>Y 所以z放在xy中间, T2>Y,T2<Z; T3>Z,T3<X

             

4、那既然说完上面的四种调整结构了,如何使用呢,用插入元素(90,66,65,98,100,88,105,102,110,103)构造一颗平衡二叉树,构造过程如下

          

          

               

5、既然插入说了,此处相信大家删除结点在调整为平衡二叉树一定会了吧,就不一一举例了

感谢观看

 

标签:结点,删除,二叉,插入,二叉树,平衡
From: https://www.cnblogs.com/gunancheng/p/17467183.html

相关文章

  • 初级数据结构--二叉树
    二叉树节点:树中的元素终端节点:分支数为0的节点有序树、无序树:节点左右排列顺序不得互换叫有序,反之为无序普通二叉树排序二叉树二叉顺序表定义和初始化typedefstructData{ intval;}Data;typedefstructTree{ Datadata; structTree*lbranch; structTree*rbranch;}T......
  • 代码随想录算法训练营第十七天|● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
    110.平衡二叉树力扣题目链接(opensnewwindow)给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例1:给定二叉树[3,9,20,null,null,15,7]返回true。示例2:给定二叉树[1,2,2,3,3,nu......
  • 算法学习day14二叉树part01-94、144、145
    packageLeetCode.Treepart01;importjava.util.ArrayList;importjava.util.List;publicclassTraversal{publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>result=newArrayList<Integer>();pre......
  • 二叉树的性质
    性质1: 在二叉树的第i层至多有2^(i-1)个节点  ,至少有1个节点               (度:节点拥有的子节点的个数)性质2:在深度为k的二叉树中,至多有2^k-1个节点,至少有k个节点性质3:对任何一颗二叉树,叶子个数为n0,度数为2的节点个数为n......
  • 代码随想录算法训练营第十五天|● 层序遍历 10 ● 226.翻转二叉树 ● 101.对称二叉
    102.二叉树的层序遍历力扣题目链接(opensnewwindow)给你一个二叉树,请你返回其按层序遍历得到的节点值。(即逐层地,从左到右访问所有节点)。思路:迭代法,非递归思路,借用队列,先进先出来达到层序遍历的效果。但写的过程中,我不知道该如何让同一层的数据都保存在一个数组里。看了题解发......
  • 二叉树
    (不是太太太理解)1、结构体定义typedefstructBiTNode{TElemTypedata;structBiTNode*lchild,*rchild;}BiTNode;2、构造二叉树intCreateBTree(BiTNode**tp)//?{//构造方法,或者说构造顺序,从左子树开始构造intx;printf("pleaseinpyutint......
  • 数据结构与算法-06树及二叉树
    树和二叉树完全二叉树:除了最下层,每一层都满了满二叉树:每一层都满了平衡二叉树:任意两个节点的高度差不大于1排序二叉树:链式存储常见应用场景xml/html解析路由协议mysql数据库索引文件系统结构二叉树在二叉树的第i层上至多有2^(i-1)个结点深度为k的二叉树......
  • 【锐格】数据结构-实验-二叉树
    7075#include<iostream>#include<cstdio>usingnamespacestd;typedefstructTNode{chardata;structTNode*lchild,*rchild;}BiNode,*BiTree;BiTreeT;voidcreateTree(BiTree&T){charch;cin>>ch;if(ch==&#......
  • 30. 平衡二叉树
    一、什么是平衡二叉树  平衡二叉树(BalanceFactorTree,简称AVL树)是一个特殊的二叉树,它可以是空树。如果不为空,它任一节点左、右子树高度差的绝对值不超过1,即|BF(T)|≤1。其中,BF是指平衡因子(BalanceFactory):\(BF(T)=h_{L}-h_{R}\),其中\(h_{L}\)和\(h_{R}\)分别为......
  • #yyds干货盘点# LeetCode程序员面试金典:二叉树的右视图
    1.简述:给定一个二叉树的根节点root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例2:输入: [1,null,3]输出: [1,3]示例3:输入: []输出: []2.代码实现:classSolution{publicList<I......