こんにちは、入力として(文字列として)通常のUNIXパスツリーがあるとします。
root 0
root/file1.txt 1
root/file2.txt 2
root/folder1 3
root/folder1/file3.txt 4
root/folder1/file4.txt 5
e.t.c.
この文字列をツリーデータ構造に変換するためのより良い方法は何ですか?
このようなもの:
'\'のルートノードを作成します
node=root;
token=getNextToken(inputString);
while (token){
if (!node.childExist(token)) node.createChild(token)
node=node.Child(token)
token=getNextToken(inputString);
}
今、私は自分で作成した単純なツリー表現を使用しています
template<typename T>
class TreeNode
{
public:
TreeNode() {};
TreeNode(T)
{
value = T;
}
TreeNode(const T& value)
: Value(value)
{
}
T Value;
vector<TreeNode<T>*> Children;
};
私はGirのアルゴリズム(上記に投稿)を本当に理解していません。しかし、私は解決策が次のようでなければならないと思います:
1. Get a root node, set depth_level = 0
3. set support_node = root_node
4. for each path line
5. determine the quantity of slashes "/", key and file(folder) name
so for example in string root/folder1/file4.txt 5, num of slashes = 2 filename = file4.txt, key = 5
create current_node
6. if num_of_slashes == level + 2
7. set support_node = current_node
8. if num_of_slashes == level + 1
9. add children to support_node
10. And after that we must remember all ancestors, going down to leaves. Cuz we can return to any ancestor.
私にとって、このアルゴリズムは本当に複雑なようです。上記のアルゴリズムがわかりません。この質問を明確にすることは可能でしょうか?たぶん、私が木を保存するために使用する構造は最良のものではありませんか?