Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > pl.comp.programming > #31486
| From | Borneq <borneq@antyspam.hidden.pl> |
|---|---|
| Newsgroups | pl.comp.programming |
| Subject | Jak usunąć najlepiej element z drzewa ? |
| Date | 2018-03-15 01:57 +0100 |
| Organization | ATMAN - ATM S.A. |
| Message-ID | <p8cgcv$bd7$1@node1.news.atman.pl> (permalink) |
podczas gdy nie można wołać a.remove() a co najwyżej usuwać dzieci tego
węzła.
kod:
#include <memory>
#include <string>
#include <vector>
#include <assert.h>
using namespace std;
class Node
{
vector<shared_ptr<Node>> childs;
Node* parent = nullptr;//not shared_ptr! because of memory leaks of
circular dependency
int level = 0;
public:
string name;
Node(string name)
{
this->name = name;
}
~Node()
{
printf("delete %s\n",name.c_str());
}
shared_ptr<Node> clone()
{
shared_ptr<Node> result = make_shared<Node>(name+"a");
return result;
}
void erase()
{
printf("erase from %s\n", name.c_str());
childs.clear();
}
void Add(shared_ptr<Node> node)
{
shared_ptr<Node> clone = node->clone();
childs.push_back(clone);
clone->parent = this;
clone->level = level+1;
for (size_t i = 0; i<node->childs.size(); i++)
clone->Add(node->childs[i]);
}
shared_ptr<Node>& at(int index)
{
return childs[index];
}
void print()
{
for (int i = 0; i<level; i++)
printf(" ");
printf("%s->",name.c_str());
if (parent) printf("%s", parent->name.c_str());
printf("\n");
for (size_t i=0; i<childs.size(); i++)
childs[i]->print();
}
};
int main()
{
shared_ptr<Node>root,rootB;
root = make_shared<Node>("1");
root->Add(make_shared<Node>("2"));
root->Add(make_shared<Node>("3"));
root->at(0)->Add(make_shared<Node>("4"));
root->at(0)->Add(make_shared<Node>("5"));
root->at(1)->Add(make_shared<Node>("6"));
root->at(1)->Add(make_shared<Node>("7"));
rootB = make_shared<Node>("1b");
rootB->Add(make_shared<Node>("2b"));
rootB->Add(make_shared<Node>("3b"));
rootB->at(0)->Add(make_shared<Node>("4b"));
rootB->at(0)->Add(make_shared<Node>("5b"));
rootB->at(1)->Add(make_shared<Node>("6b"));
rootB->at(1)->Add(make_shared<Node>("7b"));
// node->Add(root);
//root->print();printf("\n");
//rootB->print(); printf("\n");
root->at(0)->Add(rootB);
rootB = nullptr;
//rootB->at(0)->Add(rootB);//tu cykl?
root->print();
root->at(0)->erase();
root->print();
return 0;
}
Back to pl.comp.programming | Previous | Next — Next in thread | Find similar | Unroll thread
Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 01:57 +0100
Re: Jak usunąć najlepiej element z drzewa ? Tomasz Kaczanowski <kaczus@poczta.onet.pl> - 2018-03-15 08:10 +0100
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 11:35 +0100
Re: Jak usunąć najlepiej element z drzewa ? Tomasz Kaczanowski <kaczus@poczta.onet.pl> - 2018-03-15 12:30 +0100
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 14:17 +0100
Re: Jak usunąć najlepiej element z drzewa ? Tomasz Kaczanowski <kaczus@poczta.onet.pl> - 2018-03-15 14:24 +0100
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 14:54 +0100
Re: Jak usunąć najlepiej element z drzewa ? "M.M." <mmarszik@gmail.com> - 2018-03-15 10:43 -0700
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 19:31 +0100
Re: Jak usunąć najlepiej element z drzewa ? "M.M." <mmarszik@gmail.com> - 2018-03-15 14:15 -0700
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 22:41 +0100
Re: Jak usunąć najlepiej element z drzewa ? "M.M." <mmarszik@gmail.com> - 2018-03-15 15:00 -0700
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-15 23:46 +0100
Re: Jak usunąć najlepiej element z drzewa ? Borneq <borneq@antyspam.hidden.pl> - 2018-03-16 00:07 +0100
Re: Jak usunąć najlepiej element z drzewa ? "M.M." <mmarszik@gmail.com> - 2018-03-16 06:26 -0700
Re: Jak usunąć najlepiej element z drzewa ? "M.M." <mmarszik@gmail.com> - 2018-03-15 05:34 -0700
Re: Jak usunąć najlepiej element z drzewa ? Tomasz Kaczanowski <kaczus@poczta.onet.pl> - 2018-03-15 13:48 +0100
csiph-web