我正在使用此库来保存有关树结构的信息:
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)将遍历所有通向root的节点,即 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();
答案 0 :(得分:2)
常用的方法是使用类似的东西
Node tmp = gametree_it;
while (tmp->parent() != NULL) {
tmp = tmp->parent();
}
root = tmp->get();
也许你必须使用while (tmp->has_parent())
或类似的东西。
答案 1 :(得分:2)
奥托说得对:)
我最终使用的是定义一个指向gametree的指针。然后使用 - &gt; 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();
}