ZKX's LAB

二叉树如何转换成平衡二叉树? 如何调整为平衡二叉树

2020-09-24知识18

二叉树如何转换成平衡二叉树 它或者是一棵空树,或者是具有下列性质的二叉树:它的左子树和右子树都是平衡二叉树,且左子树和右子树的高度之差之差的绝对值不超过1.常用算法有:红黑树、AVL树、Treap等。平衡二叉树的调整方法 平衡二叉树是在构造二叉排序树的过程中,每当插入一个新结点时,首先检查是否因插入新结点而破坏了二叉排序树的平衡性,若是,则找出其中的最小不平衡子树,在保持二叉排序树特性的前提下,调整最小不平衡子树中各结点之间的链接关系,进行相应的旋转,使之成为新的平衡子树。具体步骤如下:⑴ 每当插入一个新结点,从该结点开始向上计算各结点的平衡因子,即计算该结点的祖先结点的平衡因子,若该结点的祖先结点的平衡因子的绝对值均不超过1,则平衡二叉树没有失去平衡,继续插入结点;⑵ 若插入结点的某祖先结点的平衡因子的绝对值大于1,则找出其中最小不平衡子树的根结点;⑶ 判断新插入的结点与最小不平衡子树的根结点的关系,确定是哪种类型的调整;⑷ 如果是LL型或RR型,只需应用扁担原理旋转一次,在旋转过程中,如果出现冲突,应用旋转优先原则调整冲突;如果是LR型或LR型,则需应用扁担原理旋转两次,第一次最小不平衡子树的根结点先不动,调整插入结点所在。

二叉树如何转换成平衡二叉树? 如何调整为平衡二叉树

二叉树如何转换成平衡二叉树? 平衡二叉树首先要求是一棵二叉排序树,然后要求每个结点的平衡因子(左子树高度减右子树高度)在1,0,-1之间。给定二叉树根节点root,编程判断一个二叉树是否为平衡二叉树算法思路:按照某种遍历规则遍历二叉树,在遍历的过程中,检查根是不是大于左子树(不空时)的根而且小于右子树(不空时)的根,并计算左右子树高度之差是在在1,0,-1之间。如果所有结点都满足这两条件则为平衡二叉树

二叉树如何转换成平衡二叉树? 如何调整为平衡二叉树

怎么转变成平衡二叉树 有两个35?将第一个35的右子树值改成40来解答把55为根的平衡因子为145为根的平衡因子为275为根的平衡因子为0故是45为根的二叉树不平衡35为根的平衡因子为-1故先将35为根的二叉树进行单向左旋转 将40接到根结点(即45的左子树位置)将35结点接到40的左子树位置再将以45为根的二叉树进行单向右选择 将40接到根结点(即55的左子树位置)将45结点接到40的右子树位置有代码 C语言的 需要的追

二叉树如何转换成平衡二叉树? 如何调整为平衡二叉树

#平衡二叉树#二叉排序树#遍历

随机阅读

qrcode
访问手机版