c++ - 遍历树

标签 c++ algorithm iteration

我正在尝试弄清楚如何反向迭代并通过它向前,或者至少反向调用一个方法。

这是它的工作原理。

Widgets 有一个 std::vector of Widget* 是控件的 child 。子 vector 按 z 顺序排列,这意味着 child[0] 在 child[1] 之后(按渲染顺序)。每个控件都有一个指向其父控件的指针,但父控件为 NULL 的根(虚拟)控件除外。

对于我的渲染,我需要进行某种程度的阶梯式迭代(从后到前),例如:

root->child[0];
root->child[0]->child[0];
root->child[0]->child[1];
root->child[1];
root->child[1]->child[0];
root->child[1]->child[1];

但是要找到鼠标下的哪个小部件,我必须从前到后在矩形测试中做我的观点:

   root->child[9]->child[1];
    root->child[9]->child[0];
    root->child[9];
    root->child[8]->child[2];
    root->child[8]->child[1];
    root->child[8]->child[0];
    root->child[8];

我需要什么样的迭代才能有效地执行上述两种类型的迭代? (从前到后,从前到后)。

谢谢

最佳答案

前向迭代:

void blah_forward(const Widget *p)
{
    p->do_something();
    std::for_each(p->children.begin(), p->children.end(), blah_forward);
}

反向迭代:

void blah_reverse(const Widget *p)
{
    std::for_each(p->children.rbegin(), p->children.rend(), blah_reverse);
    p->do_something();
}

(未经测试,但希望您能理解)。

关于c++ - 遍历树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3946876/

相关文章:

c++ - 计算数组的大小

javascript - ES6 数组交换的时间/空间复杂度是多少?

algorithm - RSA token 如何工作?

python - 如何在 python 中的 for 循环中跳过函数内的迭代步骤?

c++ - 我被困在一个关于 32 位机器读写周期的简单作业中

c++ - C++中的Mergesort问题

c++ - 为 C++ 选择 begin() 和 end()

python - 使 while 解析函数递归

python - 在 Pandas 数据框中进行累积总计的最快方法

python - 与列表相比,在生成器上迭代多次的速度