Как сделать дерево в C++?

Вот быстрый скрипт, который вы можете добавить в качестве задания на конвейер, чтобы перечислить все переменные среды:

node {
    echo(env.getEnvironment().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
    echo(System.getenv().collect({environmentVariable ->  "${environmentVariable.key} = ${environmentVariable.value}"}).join("\n"))
}

В этом списке будут перечислены переменные системы и Jenkins.

6
задан Bill the Lizard 10 August 2011 в 15:37
поделиться

2 ответа

Вот tree.hh, который является немного близко к тому, что Вы хотите сделать, хотя немного отличающийся.

Вот часть кода, извлеченного из его веб-сайта.

int main(int, char **)
   {
   tree<string> tr;
   tree<string>::iterator top, one, two, loc, banana;

   top=tr.begin();
   one=tr.insert(top, "one");
   two=tr.append_child(one, "two");
   tr.append_child(two, "apple");
   banana=tr.append_child(two, "banana");
   tr.append_child(banana,"cherry");
   tr.append_child(two, "peach");
   tr.append_child(one,"three");

   loc=find(tr.begin(), tr.end(), "two");
   if(loc!=tr.end()) {
      tree<string>::sibling_iterator sib=tr.begin(loc);
      while(sib!=tr.end(loc)) {
         cout << (*sib) << endl;
         ++sib;
         }
      cout << endl;
      tree<string>::iterator sib2=tr.begin(loc);
      tree<string>::iterator end2=tr.end(loc);
      while(sib2!=end2) {
         for(int i=0; i<tr.depth(sib2)-2; ++i) 
            cout << " ";
         cout << (*sib2) << endl;
         ++sib2;
         }
      }
   }

Теперь, что отличается? Ваша реализация более проста когда дело доходит до, добавляют узел к дереву. Хотя Ваша версия indiscutably более проста, dev этого lib, вероятно, хотел иметь некоторую информацию, доступную, не просматривая дерево, такое как размер дерева, например.

Я также предполагаю, что он не хотел хранить корень на всех узлах по причине производительности. Таким образом, если Вы хотите реализовать его Ваш путь, я предлагаю, чтобы Вы сохранили большую часть логики и добавили ссылку к семенному дереву в итераторе и переписали, добавляют немного.

5
ответ дан 16 December 2019 в 21:49
поделиться

Почему Вы хотели бы сделать это? Если это для изучения целей затем, можно записать собственную древовидную структуру данных. Если это для того, чтобы получить выгоду от структуры данных, содержащей произвольные индексные типы, оптимизированный для поиска и хороший во вставке затем рассматривают использование карты.

Карта является ассоциативным контейнером, который имеет гарантии исполнения, идентичные тем из дерева: логарифмический поиск, логарифмическая вставка, логарифмическое удаление, линейное пространство. Внутренне они часто реализуются как красно-черные деревья, хотя это не гарантия. Однако, как пользователь STL все, о чем необходимо заботиться, является гарантиями исполнения алгоритмов STL и структур данных. Реализованы ли они как деревья, или маленькие зеленые мужчины не должны иметь значения для Вас.

Как примечание стороны, нет такой вещи как корень () функции. Все контейнеры STL имеют начинание () функция, реализовывая концептуальное начало контейнера. Вид итератора, возвращенного той функцией, зависит от характеристик контейнера.

3
ответ дан 16 December 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: