本文整理汇总了C++中BTreeNode::deleteChildren方法的典型用法代码示例。如果您正苦于以下问题:C++ BTreeNode::deleteChildren方法的具体用法?C++ BTreeNode::deleteChildren怎么用?C++ BTreeNode::deleteChildren使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类BTreeNode
的用法示例。
在下文中一共展示了BTreeNode::deleteChildren方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: pruneTree
void BTreeBase::pruneTree(BTreeNode *root, bool /*conditionalRoot*/)
{
Traverser t(root);
t.descendLeftwardToTerminal();
bool done = false;
while(!done)
{
//t.descendLeftwardToTerminal();
if( t.current()->parent() )
{
if( t.oppositeNode()->hasChildren() ) pruneTree(t.oppositeNode());
}
t.moveToParent();
if( !t.current()->hasChildren() )
{
//if(t.current() == t.root()) done = true;
if(!t.current()->parent()) done = true;
continue;
}
BTreeNode *l = t.current()->left();
BTreeNode *r = t.current()->right();
BTreeNode *n = 0;
BTreeNode *z = 0;
// Deal with situations where there are two constants so we want
// to evaluate at compile time
if( (l->type() == number && r->type() == number) ) // && !(t.current()==root&&conditionalRoot) )
{
if(t.current()->childOp() == Expression::division && r->value() == "0" )
{
t.current()->setChildOp(Expression::divbyzero);
return;
}
QString value = QString::number(Parser::doArithmetic(l->value().toInt(),r->value().toInt(),t.current()->childOp()));
t.current()->deleteChildren();
t.current()->setChildOp(Expression::noop);
t.current()->setType(number);
t.current()->setValue(value);
}
// Addition and subtraction
else if(t.current()->childOp() == Expression::addition || t.current()->childOp() == Expression::subtraction)
{
// See if one of the nodes is 0, and set n to the node that actually has data,
// z to the one containing zero.
bool zero = false;
if( l->value() == "0" )
{
zero = true;
n = r;
z = l;
}
else if( r->value() == "0" )
{
zero = true;
n = l;
z = r;
}
// Now get rid of the useless nodes
if(zero)
{
BTreeNode *p = t.current(); // save in order to delete after
replaceNode(p,n);
t.setCurrent(n);
// Delete the old nodes
delete p;
delete z;
}
}
// Multiplication and division
else if(t.current()->childOp() == Expression::multiplication || t.current()->childOp() == Expression::division)
{
// See if one of the nodes is 0, and set n to the node that actually has data,
// z to the one containing zero.
bool zero = false;
bool one = false;
if( l->value() == "1" )
{
one = true;
n = r;
z = l;
}
else if( r->value() == "1" )
{
one = true;
n = l;
z = r;
}
if( l->value() == "0" )
{
zero = true;
n = r;
z = l;
}
//.........这里部分代码省略.........