当前位置: 首页>>代码示例>>C++>>正文


C++ CNode::borrowFrom方法代码示例

本文整理汇总了C++中CNode::borrowFrom方法的典型用法代码示例。如果您正苦于以下问题:C++ CNode::borrowFrom方法的具体用法?C++ CNode::borrowFrom怎么用?C++ CNode::borrowFrom使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CNode的用法示例。


在下文中一共展示了CNode::borrowFrom方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: recursive_remove

 void CBPlusTree::recursive_remove(CNode* parentNode, KeyType key, DataType& dataValue) 
 { 
     int keyIndex = parentNode->getKeyIndex(key); 
     int childIndex= parentNode->getChildIndex(key, keyIndex); // 孩子结点指针索引  
     if (parentNode->getType()==LEAF)// 找到目标叶子节点  
     { 
         if (key==m_MaxKey&&keyIndex>0) 
         { 
             m_MaxKey = parentNode->getKeyValue(keyIndex-1); 
         } 
         dataValue = ((CLeafNode*)parentNode)->getData(keyIndex); 
         parentNode->removeKey(keyIndex, childIndex);  // 直接删除  
         // 如果键值在内部结点中存在,也要相应的替换内部结点  
         if (childIndex==0 && m_Root->getType()!=LEAF && parentNode!=m_DataHead) 
         { 
             changeKey(m_Root, key, parentNode->getKeyValue(0)); 
         } 
     } 
     else // 内结点  
     { 
         CNode *pChildNode = ((CInternalNode*)parentNode)->getChild(childIndex); //包含key的子树根节点  
         if (pChildNode->getKeyNum()==MINNUM_KEY)                       // 包含关键字达到下限值,进行相关操作  
         { 
             CNode *pLeft = childIndex>0 ? ((CInternalNode*)parentNode)->getChild(childIndex-1) : NULL;                       //左兄弟节点  
             CNode *pRight = childIndex<parentNode->getKeyNum() ? ((CInternalNode*)parentNode)->getChild(childIndex+1) : NULL;//右兄弟节点  
             // 先考虑从兄弟结点中借  
             if (pLeft && pLeft->getKeyNum()>MINNUM_KEY)// 左兄弟结点可借  
             { 
                 pChildNode->borrowFrom(pLeft, parentNode, childIndex-1, LEFT); 
             } 
             else if (pRight && pRight->getKeyNum()>MINNUM_KEY)//右兄弟结点可借  
             { 
                 pChildNode->borrowFrom(pRight, parentNode, childIndex, RIGHT); 
             } 
             //左右兄弟节点都不可借,考虑合并  
             else if (pLeft)                    //与左兄弟合并  
             { 
                 pLeft->mergeChild(parentNode, pChildNode, childIndex-1); 
                 pChildNode = pLeft; 
             } 
             else if (pRight)                   //与右兄弟合并  
             { 
                 pChildNode->mergeChild(parentNode, pRight, childIndex); 
             } 
         } 
         recursive_remove(pChildNode, key, dataValue); 
     } 
 } 
开发者ID:b-xiang,项目名称:SQLMini,代码行数:48,代码来源:BPlus_tree.cpp


注:本文中的CNode::borrowFrom方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。