<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[(binär-)bäume]]></title><description><![CDATA[<p>also ich möchte mir gerne eine intelligente gut durchdachte/strukturierte objekthierarchie programmieren, die mittels vererbung so ziemlich alle möglichen bäume abhandeln kann (suchbaum, rot-schwarzbäume, AVL-bäume, etc.).<br />
also die einzelnen baumarten hab ich teilweise schon separat programmiert, aber da ist halt viel code der im prinzip doppelt ist, was ich durch vererbung etc. wegbekommen möchte. das problem ist soweit ich es sehe, das jede baumart so ihre eigenen speziellen knoten hat, die mit mehr oder weniger zusätzlichen daten ausgestattet sind im vergleich zu einem ganz einfachen baumknoten, wo nur der elternknoten und die kinderknoten gespeichert werden.<br />
nun wollte ich gern wissen ob, und wenn wie, es möglich ist das möglichst effizient zu lösen ohne viel doppelten code zu haben.<br />
z.B. hat jede baumart die methode get_root(), die die wurzel liefert, allerdings ist der rückgabetyp bei jeder baumart halt der jeweilige knotentyp.<br />
ich hatte mir ja gedacht das vllt sowas wie templates möglich sind, aber wie genau weiß ich noch nicht.<br />
also die knoten kann ich kann ich voneinander ableiten, aber wie ich das dann effizient in eine ableitungsstruktur von bäumen einbauen kann, ist mir noch nicht so recht eingefallen.<br />
also falls wer eine intelligente lösung hat immer raus damit. vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/181487/binär-bäume</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 10:24:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/181487.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 14 May 2007 12:09:30 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 12:09:30 GMT]]></title><description><![CDATA[<p>also ich möchte mir gerne eine intelligente gut durchdachte/strukturierte objekthierarchie programmieren, die mittels vererbung so ziemlich alle möglichen bäume abhandeln kann (suchbaum, rot-schwarzbäume, AVL-bäume, etc.).<br />
also die einzelnen baumarten hab ich teilweise schon separat programmiert, aber da ist halt viel code der im prinzip doppelt ist, was ich durch vererbung etc. wegbekommen möchte. das problem ist soweit ich es sehe, das jede baumart so ihre eigenen speziellen knoten hat, die mit mehr oder weniger zusätzlichen daten ausgestattet sind im vergleich zu einem ganz einfachen baumknoten, wo nur der elternknoten und die kinderknoten gespeichert werden.<br />
nun wollte ich gern wissen ob, und wenn wie, es möglich ist das möglichst effizient zu lösen ohne viel doppelten code zu haben.<br />
z.B. hat jede baumart die methode get_root(), die die wurzel liefert, allerdings ist der rückgabetyp bei jeder baumart halt der jeweilige knotentyp.<br />
ich hatte mir ja gedacht das vllt sowas wie templates möglich sind, aber wie genau weiß ich noch nicht.<br />
also die knoten kann ich kann ich voneinander ableiten, aber wie ich das dann effizient in eine ableitungsstruktur von bäumen einbauen kann, ist mir noch nicht so recht eingefallen.<br />
also falls wer eine intelligente lösung hat immer raus damit. vielen dank schonmal im voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284587</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 14 May 2007 12:09:30 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 12:32:24 GMT]]></title><description><![CDATA[<p>Also wenn du Vererbung einsetzen willst, dann solltest du dir ersteinmal einen Anwendungsfall definieren, um dann eine geeignete Schnittstelle (Interface) zu definieren (dies könnte dann eine virtuelle Basisklasse sein).<br />
Dann evtl. noch entsprechende Iteratoren zum Traversieren etc.</p>
<p>Bei einer Template-Implementierung könntest du dich ja an die STL (bzw. C++ Standard Bibliothek) halten, z.b. die Klasse std::map.</p>
<p>Welche Lösung du wählst hat vor allem damit zu tun, ob du Änderungen (des internen Baumtyps) zur Laufzeit zulassen willst oder nicht.</p>
<p>Wenn es dir jedoch mehr um die Umstrukturierung deines Source-Codes geht, dann solltest du evtl. einfach geeignete Hilfsklassen bzw. -funktionen definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284609</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Mon, 14 May 2007 12:32:24 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 12:57:05 GMT]]></title><description><![CDATA[<p>ok, damit ist aber immernoch nicht mein problem gelöst, das jeder baum verschiedene knotentypen hat oder ich versteh deinen vorschlag nicht ganz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284636</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 14 May 2007 12:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 19:08:25 GMT]]></title><description><![CDATA[<p>Ich würde garnicht vererbung verwenden, sondern nur templates.<br />
Mit templates kannst du ja &quot;duck typing&quot; machen, d.h. ob die Knoten etc. nun verwandt sind oder nicht ist egal, solange sie alle nötigen Methoden implementieren (Name+Signatur muss passen, das reicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284906</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 14 May 2007 19:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 20:49:04 GMT]]></title><description><![CDATA[<p>was soll denn &quot;duck typing&quot; sein, hab ich noch nie gehört.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284973</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284973</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Mon, 14 May 2007 20:49:04 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 20:50:21 GMT]]></title><description><![CDATA[<p>junge.... Wie wärs wenn du mal deinen Kopf zum Nachdenken benutzt und nciht nur fragen stellst auf die du selber antworten finden kannst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284974</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284974</guid><dc:creator><![CDATA[hustbär]]></dc:creator><pubDate>Mon, 14 May 2007 20:50:21 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Mon, 14 May 2007 21:07:47 GMT]]></title><description><![CDATA[<p>vorallem, wenn die antwort noch in derselben Zeile steht.</p>
<p>mal ein Beispiel:</p>
<pre><code class="language-cpp">struct A
{
    int foo;
};

struct B
{
    int foo;
};

template&lt;class T&gt;
class Bar
{
    T foobar;

    public:
    void function()
    {
        foobar.foo=5;//funktioniert, solange T ein member foo hat.
    }
};

//im code;
Bar&lt;A&gt; a;
Bar&lt;B&gt; b;
a.function();
b.function();
</code></pre>
<p>Und sowas lässt sich halt in diesem Fall ziemlich gut anwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1284985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1284985</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 14 May 2007 21:07:47 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Tue, 15 May 2007 07:21:01 GMT]]></title><description><![CDATA[<p>ok, dann werd ich es mal so probieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285084</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285084</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 15 May 2007 07:21:01 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Tue, 15 May 2007 15:12:42 GMT]]></title><description><![CDATA[<p>&quot;if it walks like a duck, and quacks like a duck, it must be a duck&quot;</p>
<p><a href="http://en.wikipedia.org/wiki/Duck_typing" rel="nofollow">http://en.wikipedia.org/wiki/Duck_typing</a></p>
<p>BTW: das &quot;hustb<strong>ä</strong>r&quot; Posting ist nicht von mir.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285479</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285479</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2007 15:12:42 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Tue, 15 May 2007 19:35:16 GMT]]></title><description><![CDATA[<p>mir ist jetz noch ein anderes problem mit den knoten aufgefallen. und zwar hat ja jeder knoten eltern- und kinderknoten vom gleichen typ wie der knoten. dh wie mache ich denn das wenn ich die knoten voneinander ableite, aber trotzdem bei den funktionen get_parent() und get_child() der entsprechende typ zurückgegeben wird?</p>
<pre><code class="language-cpp">class A
{
  private:
    A* parent;
//...
  public:
    A* get_parent();
};

class B : public A
{
};

class C : public B
{
};
</code></pre>
<p>also ich möchte das jede klasse quasi nur zeiger ihres eigenen typs hat, d.h. in B sollte parent vom typ B* sein und nicht vom typ A*. kann man das irgendwie hinbekommen, ohne in jeder klasse parent neu zu definieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285749</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Tue, 15 May 2007 19:35:16 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Tue, 15 May 2007 21:45:22 GMT]]></title><description><![CDATA[<p>@FreakyBKA :</p>
<p>get_parent() in der Basisklasse zu haben macht IMHO nur Sinn wenn get_parent() auch &quot;virtual&quot; ist (<em>). In dem Fall kannst du es überschreiben. Wenn der override dann ein Derived</em> statt einem Base* zurückliefert nennt man das einen &quot;covariant return type&quot; (ein Derived ist ja auch ein Base, daher ist das Überschreiben erlaubt) Wird allerdings nicht von allen Compilern unterstützt.</p>
<p>(*): &quot;virtual&quot; ist in dem Fall aber doof, da es u.U. deutlich langsamer sein wird. Ohne virtual könnte der Compiler sehr schön inlinen und u.U. manche Teile ganz wegoptimieren.</p>
<p>Ich weiss auch nicht was da bei verschiedenen Baumarten viel an Gemeinsamkeiten vorhanden sein soll wo man Code mehrfach verwenden könnte... gerademal dass jeder Knoten ein Parent hat, aber das war's dann auch schon. Gibt ja Bäume wo jeder Knoten gleich ist (=auch innere Knoten haben Werte), und Bäume wo es unterschiedliche Knoten gibt. Und sogar Bäume wo ein Knoten mehr als nur einen Wert haben kann. Und die Algorithmen (Einfügen, Löschen, nächsten Wert finden etc.) sind auch ziemlich anders, zumindest anders genug als dass man kaum mal bei 2 oder 3 Bäumen 1:1 den gleichen Code verwenden könnte...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1285810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1285810</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 15 May 2007 21:45:22 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Wed, 16 May 2007 12:07:38 GMT]]></title><description><![CDATA[<p>ja da hast du wahrscheinlich nicht ganz unrecht, naja, dann muss ich wohl doch alles einzeln lassen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":-("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286121</guid><dc:creator><![CDATA[StarCraftFeuerteufel]]></dc:creator><pubDate>Wed, 16 May 2007 12:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to (binär-)bäume on Wed, 16 May 2007 14:03:46 GMT]]></title><description><![CDATA[<p>Naja, wenn du erstmal alles implementiert hast, siehst du eh wo Code dupliziert ist. Den kannst du dann ja in irgendwelche Basisklassen und/oder Templates packen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1286208</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1286208</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 16 May 2007 14:03:46 GMT</pubDate></item></channel></rss>