For-loop走下树

时间:2017-03-30 02:01:07

标签: c++ loops for-loop tree

我有一个存储在名为std::vector的{​​{1}}中的k-ary树:

tree

0, 1, 2 3, 4, 5 6, 7, 8 9, 10, 11 12,13,14 15,16,17 18,19,20 21,22,23 24,25,26 27,28,29 30,31,32 33,34,35 36,37,38 草绘

以上

我正在寻找类似于以下的循环:

tree.size() == 39

应该输出:

for (size_t i=0,j=tree.size(); i!=j; i=some_magic()) // <<---here
{
  std::cout << i << std::endl;
}

1 个答案:

答案 0 :(得分:1)

对于深度优先搜索,您需要某种堆栈。

int child(int i, int c) { return (i+1)*3+c; }

int main()
{
    std::vector<int> parents = { 2, 1, 0 };
    while(!parents.empty())
    {
        int i = parents.back();
        parents.pop_back();
        std::cout << tree[i] << std::endl;
        for(int c = 0; c != 3; ++c)
        {
            if(child(i, 2-c) < tree.size())
                parents.push_back(child(i, 2-c));
        }
    }
}