<?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[Algorithmus um zwei Bäume zu vegleichen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe die Aufgabe eine empfangene Datenstruktur (Baum A) gegen eine gespeicherte Definition (Baum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> zu prüfen und muss Fehler auszugeben.</p>
<p>Beide Datenstrukturen können als Bäume abgebildet werden.</p>
<p>Baum A soll sall also mit Baum B verglichen werden. Ich möchte alle Knoten von Baum A ausgeben die</p>
<p>[<em>] in Baum A vorhanden sind, aber nicht in Baum B<br />
[</em>] in Baum A fehlen, aber in Baum B vorhanden sind<br />
[*] deren Knotenwert sich zwischen Baum A von Baum B unterscheidet</p>
<p>Mein bisheriger Lösungansatz war es beiden Bäume rekursiv (in-order) zu traversieren und die Knoten zu vergleichen. Dabei komme ich aber immer beim Wechsel zwischen den Baumebenen durcheinander, wenn Knoten fehlen oder zusätzlich da sind.</p>
<p>Google ist zu dem Thema leider nicht sehr ergiebig. Dort habe ich bisher nur Antworten darauf gefunden wie man erkennt das zwei Bäume sich unterscheiden :-(.</p>
<p>Danke für jede Hilfe.</p>
<p>Gruß,<br />
BitShift</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/297285/algorithmus-um-zwei-bäume-zu-vegleichen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 06:49:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/297285.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 23 Dec 2011 05:41:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Fri, 23 Dec 2011 05:41:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe die Aufgabe eine empfangene Datenstruktur (Baum A) gegen eine gespeicherte Definition (Baum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="B)"
      alt="😎"
    /> zu prüfen und muss Fehler auszugeben.</p>
<p>Beide Datenstrukturen können als Bäume abgebildet werden.</p>
<p>Baum A soll sall also mit Baum B verglichen werden. Ich möchte alle Knoten von Baum A ausgeben die</p>
<p>[<em>] in Baum A vorhanden sind, aber nicht in Baum B<br />
[</em>] in Baum A fehlen, aber in Baum B vorhanden sind<br />
[*] deren Knotenwert sich zwischen Baum A von Baum B unterscheidet</p>
<p>Mein bisheriger Lösungansatz war es beiden Bäume rekursiv (in-order) zu traversieren und die Knoten zu vergleichen. Dabei komme ich aber immer beim Wechsel zwischen den Baumebenen durcheinander, wenn Knoten fehlen oder zusätzlich da sind.</p>
<p>Google ist zu dem Thema leider nicht sehr ergiebig. Dort habe ich bisher nur Antworten darauf gefunden wie man erkennt das zwei Bäume sich unterscheiden :-(.</p>
<p>Danke für jede Hilfe.</p>
<p>Gruß,<br />
BitShift</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2160351</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2160351</guid><dc:creator><![CDATA[BitShift]]></dc:creator><pubDate>Fri, 23 Dec 2011 05:41:37 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Fri, 23 Dec 2011 05:50:36 GMT]]></title><description><![CDATA[<p>Musst du nur sagen, ob Knoten fehlen oder auch ob sie an der gleichen Stelle sind? Für ersteres würden es ja auch schon zwei Listen tun. Oder musst du auch noch erkennen, ob ein gleicher Tailbaum an einer anderen Stelle hängt? Dann wirds deutlich aufwendiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2160352</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2160352</guid><dc:creator><![CDATA[$ungenau$]]></dc:creator><pubDate>Fri, 23 Dec 2011 05:50:36 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Fri, 23 Dec 2011 06:39:26 GMT]]></title><description><![CDATA[<p><span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>u</mi><mi>n</mi><mi>g</mi><mi>e</mi><mi>n</mi><mi>a</mi><mi>u</mi></mrow><annotation encoding="application/x-tex">ungenau</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.43056em;"></span><span class="strut bottom" style="height:0.625em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">u</span><span class="mord mathit">n</span><span class="mord mathit" style="margin-right:0.03588em;">g</span><span class="mord mathit">e</span><span class="mord mathit">n</span><span class="mord mathit">a</span><span class="mord mathit">u</span></span></span></span> schrieb:</p>
<blockquote>
<p>Musst du nur sagen, ob Knoten fehlen oder auch ob sie an der gleichen Stelle sind? Für ersteres würden es ja auch schon zwei Listen tun. Oder musst du auch noch erkennen, ob ein gleicher Tailbaum an einer anderen Stelle hängt? Dann wirds deutlich aufwendiger.</p>
</blockquote>
<p>Nö, ich muss nur sagen ob Knoten an einer bestimmten Stelle fehlen oder zuviel sind. Wenn ein Teilbaum an anderer Stelle hängt ist er an der einen Stekke zu wenig und an der anderen Stelle &quot;zuviel&quot;. Er wird also zwei mal als Fehler erkannt. Im Grunde handelt es sich um eine reine Syntaxprüfung auf ein bestehendes Datenformat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2160357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2160357</guid><dc:creator><![CDATA[BitShift]]></dc:creator><pubDate>Fri, 23 Dec 2011 06:39:26 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Fri, 23 Dec 2011 22:15:31 GMT]]></title><description><![CDATA[<p>Hi, meine Idee wäre wenn du aus den beiden Bäumen zwei gepflanzte Bäume machst.<br />
An deren Codes kannst du dann feststellen welche Teilbäume unterschiedlich aufgebaut sind.</p>
<p>Weitere Information zu gepflanzten Bäumen unter:<br />
<a href="http://www.fernuni-hagen.de/mathematik/DMO/pubs/probe.pdf" rel="nofollow">www.fernuni-hagen.de/mathematik/DMO/pubs/probe.pdf</a><br />
Das Kapitel über isomorphe Bäume.</p>
<p>Gruß, Daniel_S</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2160578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2160578</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Fri, 23 Dec 2011 22:15:31 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Sun, 08 Jan 2012 19:30:30 GMT]]></title><description><![CDATA[<p>Daniel_S schrieb:</p>
<blockquote>
<p>Hi, meine Idee wäre wenn du aus den beiden Bäumen zwei gepflanzte Bäume machst.<br />
An deren Codes kannst du dann feststellen welche Teilbäume unterschiedlich aufgebaut sind.</p>
<p>Weitere Information zu gepflanzten Bäumen unter:<br />
<a href="http://www.fernuni-hagen.de/mathematik/DMO/pubs/probe.pdf" rel="nofollow">www.fernuni-hagen.de/mathematik/DMO/pubs/probe.pdf</a><br />
Das Kapitel über isomorphe Bäume.</p>
<p>Gruß, Daniel_S</p>
</blockquote>
<p>Oh weh, das sieht aber ziemlich kompliziert aus <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="😞"
    /> . Ich schaue es mir mal an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165496</guid><dc:creator><![CDATA[BitShift]]></dc:creator><pubDate>Sun, 08 Jan 2012 19:30:30 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Mon, 09 Jan 2012 08:49:43 GMT]]></title><description><![CDATA[<p>Sind die Bäume sortiert? Kannst Du sie iterierbar machen (im Sinne der Standardbibliothek)?<br />
Wenn ja, dann bekommst Du mit <code>std::set_difference</code> von (A,B) und (B,A) die Differenzmengen Deiner Bäume. Die Vereinigung der Differenzmengen dürften Dann die Unterschiede sein.<br />
Wenn das Kriterium der Sortiertheit gegeben ist, könntest Du die Datenstruktor evtl. mit einem Adapter iterierbarmachen, ohne sie ändern zu müssen. Wenn es die um den Algorithmus selbst geht, könntest Du mal in die Implementierung der STL-Funktionen <code>std::set_difference</code> und <code>std::set_union</code> gucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165661</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Mon, 09 Jan 2012 08:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um zwei Bäume zu vegleichen on Mon, 09 Jan 2012 09:03:18 GMT]]></title><description><![CDATA[<p>Gehts hier um binäre Bäume oder um allgemeine Bäume?<br />
Bei allgemeinen Bäumen müsste man sich z.B überlegen, was es bedeutet, wenn der Knoten im A-Baum die Kinder 1,2,4 hat und der Knoten im B-Baum 1,2,3,4:</p>
<p>Möglichkeit 1: der Knoten &quot;3&quot; im A-Baum fehlt<br />
Möglichkeit 2: der Knoten &quot;4&quot; im A-Baum heißt &quot;3&quot; im B-Baum, Knoten &quot;4&quot; im B-Baum fehlt im A-Baum</p>
<p>für Möglichkeit 1 müsste man die Knoten zuordnen, was recht komplex werden kann (je nach Daten in den Knoten), Möglichkeit 2 ist simpel.<br />
Der Pseudocode für Möglichkeit 2 sähe z.B. so aus:</p>
<pre><code>compare (AKnoten, BKnoten)
{
  if (Inhalt AKnoten != Inhalt BKnoten)
    melde Unterschied;

  countComp = min(Anzahl B-Kinder, Anzahl A-Kinder);
  diffKinder = Anzahl B-Kinder - Anzahl A-Kinder;
  if (diffKinder &gt; 0)
    for (i = countComp..Anzahl B-Kinder)
      melde fehlendes A-Kind[i]
  else if (diffKinder &lt; 0)
    for (i = countComp..Anzahl A-Kinder)
      melde fehlendes B-Kind[i]

  for (i = 0..countComp)
    compare(A-Kind[i], B-Kind[i])
}
</code></pre>
<p>}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2165666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2165666</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 09 Jan 2012 09:03:18 GMT</pubDate></item></channel></rss>