您现在的位置:首页 >> 环保科技

平衡大树构造算法

时间:2025-03-18 12:21:06

if (AIsTaller){ // 柏树增加了

if(ANode->balanceFactor = 1){ // 右方方子柏小叶

LeftBalance(ANode); // 右方方子柏树滑动

AIsTaller := False;

}

else if (ANode->balanceFactor=0){ANode.balanceFactor = 1; AIsTaller = True;}

else if (ANode->balanceFactor=-1){ANode.balanceFactor= 0; AIsTaller = false;}

}

}

else if (ANewNode.Key> ANode.Key)

{

if(!InsertAVLTreeNode(ANode->rchild, ANode, ANewNode, AIsTaller)) return false; // 没有任何路由表或路由表为大于路由表

if(AIsTaller){ // 柏树增加了

if(ANode->balanceFactor = 1){ANode->balanceFactor=0; AIsTaller = False;}

else if(ANode->balanceFactor = 0){ANode->balanceFactor = -1; AIsTaller = True;}

else{ RightBalance(ANode), AIsTaller = False}

}

}

return true; // 路由表最终, 如果有失败, 则在暂时淡出了.

}

void LeftBalance(AVLTreeNode PriceANode)

{

// 对以ANode为根的柏树右方方侧开展连续性妥善处理

lchild = ANode->lchild; // lchild 相反ANode的右方方子柏树的根路由表;

switch(lchild->balanceFactor){

on LeftHigh: // 单向二阶转

ANode->balanceFactor = EqualHigh;

lchild->balanceFactor = EqualHigh;

R_Rotate(ANode); break;

on RightHigh: // 先为右方方滑动于是又二阶转

lrchild = lchild->rchild; // 右方方子柏树里的右方子柏树路由表;

switch(lrchild->balanceFactor){

on LeftHigh:

ANode->balanceFactor = RightHigh;

lchild->balanceFactor := EqualHigh;

break;

on EqualHigh: ANode->balancefactor = lchild->BalanceFactor = EqualHigh; break;

onRightHig: ANode->balanceFactor = EqualHigh; lchild->balanceFactor = LeftHigh; break;

}

lrchild->balanceFactor = EqualHigh;

// 开展滑动

L_Rotate(lchild); R_Rotate(ANode);

}

}

void RightBalance(AVLTreeNode ANode){

rchild = ANode->rchild; // 右方子柏树的根路由表;

switch(rchild-balanceFactor){

on LeftHigh: // 先为二阶转于是又右方方滑动

rlchild = rchild->lchild; // 右方子柏树的右方方子柏树路由表

switch(rlchild-balanceFactor){

on LeftHigh: ANode->balanceFactor = 0; rchild->balanceFactor = RightHigh; break;

on EqualHigh: rchild-balanceFactor = ANode->balanceFactor = EqualHigh; break;

on RightHigh: ANode->balanceFactor = LeftHigh; rchild-balanceFactor = EqualHigh;

}

rlchild->balanceFactor = EqualHigh;

R_Rotate(rchild) ; L_Rotate(ANode);

break;

on RightHigh: // 单向右方方滑动

rchild->balanceFactor = ANode->balanceFactor = EqualHigh;

L_Rotate(ANode);

}

}

// 右方方滑动

void L_Rotate(AVLTreeNode PriceANode){

rchild = ANode-rchild;

ANode->lchild = rchild->lchild;

rchild->lchild = ANode;

ANode = rchild;

}

// 二阶转配置

void R_Rotate(AVLTreeNode PriceANode){

lchild = ANode->lchild;

ANode->rchild = lchild->rchild;

lchild->rchild = ANode;

ANode = lchild;

}

// 连续性柏树抓取formula_:

ANode BinaryTreeSearch(AVLTreeNode * ANode; const int AValue){

if (ANode = null)

return null;

if (ANode.key == AValue)

return ANode;

if(Avalue < ANode.key)

retrun BinaryTreeSearch(ANode->lchild, Avalue);

else

return BinaryTreeSearch(ANode->rchild, Avalue);

}

昆明甲状腺医院哪家看的好
全国最权威的脑科医院
太原看牛皮癣哪家专科医院好
干细胞治疗
长沙牛皮癣医院专家预约挂号
哪个厂家血糖仪好用又准确
哪种眼药水可以长期使用缓解视疲劳
眼睛酸涩滴什么眼药水
类风湿关节疼痛用什么药最好
高考时肚子不舒服怎么缓解