平衡二叉树

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

RL平衡旋转
RL平衡旋转代码实现
平衡二叉ห้องสมุดไป่ตู้中插入插入结点
在平衡二叉树中插入一个新的结点后,如果二叉排序树中的某个结点的平衡因子的绝对值|bf|>1, 则出现不平衡,这时需要根据平衡旋转的类型立即进行平衡化处理,使得二叉排序树中的各结点重 新平衡。平衡二叉树插入结点的算法思想如下: 1、按二叉排序树的性质插入结点。 2、如果插入结点之后出现不平衡的结点,则转步骤3;否则插入完成。 3、找到失去平衡的最小子树。 4、判断平衡旋转的类型作相应平衡化处理。
查找函数
删除结点函数
删除结点函数
删除结点后平衡化操作
感谢观看
查找函数
插入结点函数
调整函数
a
f
插入结点后平衡化二叉树步骤
平衡二叉树删除结点
在平衡二叉树上删除操作时,同样也需要考虑平衡化旋转问题。当删除结点x时,需要对从结点x的 双亲到根结点的路径上这些结点进行考虑其子树的变化是否影响其平衡因子的值,一旦平衡因子的 绝对值|bf|>1,就要进行相应的平衡化处理;删除算法思想如下: 1、如果被删除结点x有左、右孩子,首先查找x在中序次序下的直接前驱y,再把结点y的内容传送给 x,再删除结点y(结点y最多有一个孩子)。 2、对于删除最多有一个孩子的结点x,可以简单的把x的双亲结点中原指向x的指针改指向x的孩子结 点;如果没有孩子结点,则双亲结点的相应指针置空。 3、当从结点x的双亲到根结点的路径上这些结点的平衡因子绝对值|bf|>1时,需要做相应平衡化处 理。
平衡二叉树
以奇渠
平衡二叉树的定义
一棵平衡二叉树或者是空树,或者是具有下列性质的二叉排序树:①它的左子树和右子树都是平衡 二叉树;②左子树和右子树的高度之差的绝对值不超过1。
平衡二叉树结点类
template <class ElemType> struct BinTreeNode { // 数据成员: ElemType data;// 数据域 BinTreeNode<ElemType> BinTreeNode<ElemType> int bf; //构造函数: BinTreeNode();// 无参数的构造函数 BinTreeNode(const ElemType &val,// 已知数据元素值,指向左右孩子的指针构造一个结点 *leftChild;// 左孩子指针域 *rightChild;// 右孩子指针域
//平衡因子
BinTreeNode<ElemType> *lChild = NULL,
BinTreeNode<ElemType> *rChild = NULL, int b = 0); };
LL平衡旋转
LL平衡旋转代码实现
RR平衡旋转
RR平衡旋转代码实现
LR平衡旋转
LR平衡旋转代码实现
相关文档
最新文档