2

我正在使用这个库来保存有关树结构的信息:

http://www.datasoftsolutions.net/tree_container_library/overview.php

这是我的 C++ 代码的简化版本:

#include "tcl/sequential_tree.h"

// Node has some data which is not important now

typedef sequential_tree<Node> gametree_t;
typedef sequential_tree<Node>::iterator gametree_iter;

int main() {
    gametree_t gametree;
    gametree_iter gametree_it;

    gametree_it = gametree.insert(Node(0));
    gametree_it->insert(Node(1));
    gametree_it->insert(Node(2));

    gametree_it = gametree_it->insert(Node(3));
    gametree_it->insert(Node(4));

    gametree_it = gametree_it->insert(Node(5));
    gametree_it->insert(Node(6));

    return 1;
}

树长这样

0
|_ 1
|_ 2
|_ 3
  |_4
  |_5
    |_6

我正在尝试创建一个函数,给定 Node(6) 将遍历所有通向根节点的节点,即6,5,3,0。这是我在 C++ 中的第一个项目,我无法理解指针。可能是几行 C++,但我试图这样做几个小时但没有成功。任何帮助将不胜感激。

像这样的东西有效,但它必须与许多级别一起工作,而不仅仅是 4:

gametree_it->get()->get_value();
gametree_it->parent()->get()->get_value();
gametree_it->parent()->parent()->get()->get_value();
gametree_it->parent()->parent()->parent()->get()->get_value();
4

2 回答 2

2

常用的方法是使用这样的东西

Node tmp = gametree_it;
while (tmp->parent() != NULL) {
     tmp = tmp->parent();
}
root = tmp->get();

也许你必须使用while (tmp->has_parent())或类似的东西。

于 2010-02-20T14:30:24.140 回答
2

奥托是对的:)

我最终使用的是定义一个指向游戏树的指针。然后使用 ->is_root() 方法遍历节点。

gametree_t* gametree_p;

gametree_p = gametree_it.node();   // gets current node
while (!gametree_p->is_root()) {
   cout << gametree_p->get()->get_value() << endl;
   gametree_p = gametree_p->parent();
}
于 2010-02-20T14:47:40.433 回答