作为我最初关于一小段代码的问题的后续行动,我决定要求跟进,看看你是否可以做得比我们迄今为止提出的更好。
下面的代码遍历二叉树(left/right = child/next)。我确实相信这里有一个不那么有条件的空间(down
布尔值)。最快的答案获胜!
- 该
cnt
语句可以是多个语句,因此请确保它只出现一次 child()
和成员函数的next()
速度大约是 hasChild() 和 hasNext() 操作的 30 倍。- 保持迭代<--放弃了这个要求,因为提出的递归解决方案更快。
- 这是 C++ 代码
- 节点的访问顺序必须保持在下面的示例中。(先打父母,然后打孩子,然后打“下一个”节点)。
- BaseNodePtr 是 boost::shared_ptr ,因此分配速度很慢,请避免使用任何临时 BaseNodePtr 变量。
目前这段代码访问一个测试树中的62200000个节点需要5897ms,调用这个函数200000次。
void processTree (BaseNodePtr current, unsigned int & cnt )
{
bool down = true;
while ( true )
{
if ( down )
{
while (true) {
cnt++; // this can/will be multiple statesments
if (!current->hasChild()) break;
current = current->child();
}
}
if ( current->hasNext() )
{
down = true;
current = current->next();
}
else
{
down = false;
current = current->parent();
if (!current)
return; // done.
}
}
}