ZKX's LAB

平衡二叉树的问题! 平衡二叉树调整问题

2020-07-23知识13

二叉树如何转换成平衡二叉树 或者棵空树或者具列性质二叉树:左树右树都平衡二叉树且左树右树高度差差绝值超1.用算:红黑树、AVL树、Treap等 平衡二叉树调整 平衡二叉树构造。逐个结点插入构成平衡二叉树,插入结点的数据顺序为:12,4,1,7,8,10,9,2,11,6,5 插入序列:12,4,1,7,8,10,9,2,11,6,51、先插入12成为根2、插入4在12的左子树,没有旋转3、插入1在4的左子树,以4为中心向右单旋转,结果如下:4\\1 124、插入7在12的左子树,没有旋转5、插入8在7的右子树,以8开始先左后右双旋转,结果如下:4\\1 8\\7 126、插入10在12左子树,以8为中心开始向左单旋转,结果如下:8\\4 12\\/1 7 107、插入9在10 的左子树,以10为中心向右单旋转,结果如下:8\\4 10\\/\\1 7 9 128、插入2在1的右子树,没有旋转9、插入11在12 的左子树,没有旋转10、插入6在7的左子树,没有旋转11、插入5在6的左子树,以6为中心向右单旋转,结果如下:8\\4 10\\/\\1 6 9 12\\/\\/2 5 7 11在平衡二叉树中,插入一个节点后引起不平衡,设离插入节点最近的不平衡点是A,并且已知A的左右孩子的平衡节点 因为A结点右子树的平衡因子为0,因此,只能是在左子树上插入的结点,也就是说A的左子树被加高如果你的平衡因子的定义是左子树的高度-右子树的高度,于是A的平衡因子一定是+。一个序列 生成平衡二叉树时 生成的树的形式唯一吗? 平衡二叉树问题 平衡因子一般是左子树的高度减去右子树的高度,因此从图上看,应刚插入的是31从这个结点向根回溯,直到找到一个平衡因子的绝对值大于1的就停止(如果到根都没有就不用旋转)然后向来路回退,根据来路连续三个结点的形状决定旋转的类型你的图上32是+1、35是+1,30是-2,注意30、35、32这三个结点的路线是先右后左,因此旋转类型为先左后右双旋转具体步骤如下:首先32和35向右旋转,35成为32的右子树,32的右子树给35然后30和32向左旋转,30成为32的左子树,32的左子树成为30的右子树二叉树如何转换成平衡二叉树 它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1.常用算法有:红黑树、AVL树、Treap等。平衡二叉树的调整方法 平衡二叉树是在构造二叉排序树的过程中,每当插入一个新结点时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性,若是,则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。具体步骤如下:⑴ 每当插入一个新结点,从该结点开始向上计算各结点的平衡因子,即计算该结点的祖先结点的平衡因子,若该结点的祖先结点的平衡因子的绝对值均不超过1,则平衡二叉树没有失去平衡,继续插入结点;⑵ 若插入结点的某祖先结点的平衡因子的绝对值大于1,则找出其中最小不平衡子树的根结点;⑶ 判断新插入的结点与最小不平衡子树的根结点的关系,确定是哪种类型的调整;⑷ 如果是LL型或RR型,只需应用扁担原理旋转一次,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;如果是LR型或LR型,则需应用扁担原理旋转两次,第一次最小不平衡子树的根结点先不动,调整插入结点所在。二叉树如何转换成平衡二叉树? 平衡二叉树首先要求是一棵二叉排序树,然后要求每个结点的平衡因子(左子树高度减右子树高度)在1,0,-1之间。给定二叉树根节点root,编程判断一个二叉树是否为平衡二叉树算法思路:按照某种遍历规则遍历二叉树,在遍历的过程中,检查根是不是大于左子树(不空时)的根而且小于右子树(不空时)的根,并计算左右子树高度之差是在在1,0,-1之间。如果所有结点都满足这两条件则为平衡二叉树具有5层结点的平衡二叉树至少有多少个结点 至少有12个结点。分析过程如下:因为根结点层次为1,则高度为h的平衡二叉树最少有F(h+2)-1个结点;其中F 为Fibonacci序列1,1,2,3,5,8,13,21,.;Fibonacci数列种,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子数的节点数量;易知F(1)=1,F(2)=2,F(3)=4;F(5)=F(4)+F(3)+1=2*F(3)+F(2)+2;因为F(2)=2,F(3)=4;故F(5)=2*F(3)+F(2)+2=2*4+2+2=12;即具有5层结点的平衡二叉树至少有12个结点。此题利用了平衡二叉树的性质解题。扩展资料:平衡二叉树的性质:1、它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树;2、常用算法有红黑树、AVL、Treap、伸展树等。在平衡二叉搜索树中,其高度一般都良好地维持在O(log(n)),大大降低了操作的时间复杂度;3、若根结点层次为1,则高度为h的平衡二叉树最少有F(h+2)-1个结点,其中F 为Fibonacci序列1,1,2,3,5,8,13,21,.;4、最小二叉平衡树的节点总数的公式如下 F(n)=F(n-1)+F(n-2)+1,可以参考Fibonacci(斐波那契)数列,1是根节点,F(n-1)是左子树的节点数量,F(n-2)是右子树的节点数量。参考资料来源:—平衡二叉树平衡二叉树的问题! 1.平衡二叉树解决的是动态问题,静态的查找无需平衡树,一般排序+二分或线段树即可。2.平衡树的样子不重要,它只是解题过程中用到的一个工具,只要符合平衡树的条件怎么个顺序就无所谓。在平衡二叉树中插入一个结点后造成了不平衡,设最低的不平衡结点为A 根据题意,这棵树应该是这样 D D/\\/\\ A E 插入C A E/B B \\ C这时不平衡点为A,无左孩子,平衡因子0-1=-1所以应该用LR左右型来调整。

#平衡二叉树

随机阅读

qrcode
访问手机版