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

オットーは正しかった:)

私が最終的に使用したのは、ゲームツリーへのポインターを定義することです。そして、 ->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 に答える
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 に答える