<?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[BFS vs DFS]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich die BFS in eine DFS umwandeln? Kann man das noch eleganter lösen als mit stack oder queue?</p>
<p>Bye</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

class node
{
public:
	class node *parent;
	class node *left;
	class node *right;

	int value;

	node(): parent(NULL), left(NULL), right(NULL), value(0) {}
};

class tree
{
private:
	class node *root;

public:
	class treeiterator
	{
	private:
		std::queue&lt;class node*&gt; st;
		class tree *ptree;
		class node *now;

	public:
		treeiterator(class tree *ptree_tmp): now(NULL)
		{
			ptree = ptree_tmp;
		}

		void begin()
		{
			now = ptree-&gt;get_root_node();
		}

		void end()
		{
			now = NULL;
		}

		class node *get_node()
		{
			return now;
		}

		treeiterator &amp;next()
		{
			if(now-&gt;left)
			{
				st.push(now-&gt;left);
			}
			if(now-&gt;right)
			{
				st.push(now-&gt;right);
			}

			if(!st.empty())
			{
				now = st.front();
				st.pop();
			}
			else
			{
				now = NULL;
			}

			return *this;
		}

		bool operator== (treeiterator &amp;it)
		{
			return this-&gt;get_node() == it.get_node();
		}

		bool operator!= (treeiterator &amp;it)
		{
			return this-&gt;get_node() != it.get_node();
		}

		node operator*()
		{
			return *get_node();
		}
	};

	tree(): root(NULL) {}

	class node *get_root_node()
	{
		return root;
	}

	bool insert(int val)
	{
		class node *now = root;
		class node *n = new node;
		class node *prv = NULL;
		n-&gt;value = val;

		if(!root)
		{
			root = n;
		}
		else
		{
			// search parent node
			while(now)
			{
				prv = now;

				if(val &lt; now-&gt;value)
				{
					now = now-&gt;left;
				}
				else if(val &gt; now-&gt;value)
				{
					now = now-&gt;right;
				}
			}

			now = prv;

			if(val &gt; now-&gt;value)
			{
				now-&gt;right = n;
			}
			else
			{
				now-&gt;left = n;
			}
		}

		return true;
	}

	class node *search(class node *root, int val)
	{
	}

	bool delete_node(int val)
	{
	}

	bool remove(class node *n)
	{
	}

	class treeiterator begin()
	{
		class treeiterator it(this); 
		it.begin(); 
		return it;
	}

	class treeiterator end()
	{
		class treeiterator it(this); 
		it.end(); 
		return it;
	}
};

int main()
{
	tree t;
	t.insert(4);
	t.insert(3);
	t.insert(2);
	t.insert(1);
	t.insert(5);

	tree::treeiterator it(&amp;t);
	for(it = t.begin(); it != t.end(); it = it.next())
	{
		cout &lt;&lt; (*it).value &lt;&lt; endl;

	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/310221/bfs-vs-dfs</link><generator>RSS for Node</generator><lastBuildDate>Wed, 05 Aug 2026 02:33:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/310221.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 06 Nov 2012 15:59:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 15:59:09 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>wie kann ich die BFS in eine DFS umwandeln? Kann man das noch eleganter lösen als mit stack oder queue?</p>
<p>Bye</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;queue&gt;
using namespace std;

class node
{
public:
	class node *parent;
	class node *left;
	class node *right;

	int value;

	node(): parent(NULL), left(NULL), right(NULL), value(0) {}
};

class tree
{
private:
	class node *root;

public:
	class treeiterator
	{
	private:
		std::queue&lt;class node*&gt; st;
		class tree *ptree;
		class node *now;

	public:
		treeiterator(class tree *ptree_tmp): now(NULL)
		{
			ptree = ptree_tmp;
		}

		void begin()
		{
			now = ptree-&gt;get_root_node();
		}

		void end()
		{
			now = NULL;
		}

		class node *get_node()
		{
			return now;
		}

		treeiterator &amp;next()
		{
			if(now-&gt;left)
			{
				st.push(now-&gt;left);
			}
			if(now-&gt;right)
			{
				st.push(now-&gt;right);
			}

			if(!st.empty())
			{
				now = st.front();
				st.pop();
			}
			else
			{
				now = NULL;
			}

			return *this;
		}

		bool operator== (treeiterator &amp;it)
		{
			return this-&gt;get_node() == it.get_node();
		}

		bool operator!= (treeiterator &amp;it)
		{
			return this-&gt;get_node() != it.get_node();
		}

		node operator*()
		{
			return *get_node();
		}
	};

	tree(): root(NULL) {}

	class node *get_root_node()
	{
		return root;
	}

	bool insert(int val)
	{
		class node *now = root;
		class node *n = new node;
		class node *prv = NULL;
		n-&gt;value = val;

		if(!root)
		{
			root = n;
		}
		else
		{
			// search parent node
			while(now)
			{
				prv = now;

				if(val &lt; now-&gt;value)
				{
					now = now-&gt;left;
				}
				else if(val &gt; now-&gt;value)
				{
					now = now-&gt;right;
				}
			}

			now = prv;

			if(val &gt; now-&gt;value)
			{
				now-&gt;right = n;
			}
			else
			{
				now-&gt;left = n;
			}
		}

		return true;
	}

	class node *search(class node *root, int val)
	{
	}

	bool delete_node(int val)
	{
	}

	bool remove(class node *n)
	{
	}

	class treeiterator begin()
	{
		class treeiterator it(this); 
		it.begin(); 
		return it;
	}

	class treeiterator end()
	{
		class treeiterator it(this); 
		it.end(); 
		return it;
	}
};

int main()
{
	tree t;
	t.insert(4);
	t.insert(3);
	t.insert(2);
	t.insert(1);
	t.insert(5);

	tree::treeiterator it(&amp;t);
	for(it = t.begin(); it != t.end(); it = it.next())
	{
		cout &lt;&lt; (*it).value &lt;&lt; endl;

	}

	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2268195</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268195</guid><dc:creator><![CDATA[Coder007]]></dc:creator><pubDate>Tue, 06 Nov 2012 15:59:09 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 16:09:34 GMT]]></title><description><![CDATA[<blockquote>
<p>wie kann ich die BFS in eine DFS umwandeln?</p>
</blockquote>
<p>Was meinst du damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268200</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Tue, 06 Nov 2012 16:09:34 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 16:18:02 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/21632">@knivil</a>: <a href="http://en.wikipedia.org/wiki/Breadth-first_search" rel="nofollow">BFS</a>, <a href="http://en.wikipedia.org/wiki/Depth-first_search" rel="nofollow">DFS</a>.</p>
<blockquote>
<p>Kann man das noch eleganter lösen als mit stack oder queue?</p>
</blockquote>
<p>Was meinst du damit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268204</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268204</guid><dc:creator><![CDATA[tnagraan]]></dc:creator><pubDate>Tue, 06 Nov 2012 16:18:02 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 16:33:41 GMT]]></title><description><![CDATA[<p>knivil schrieb:</p>
<blockquote>
<blockquote>
<p>wie kann ich die BFS in eine DFS umwandeln?</p>
</blockquote>
<p>Was meinst du damit?</p>
</blockquote>
<p>ich brauche die queue nur gegen einen stack auswechseln...dann habe ich eine DFS...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268212</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268212</guid><dc:creator><![CDATA[Coder007]]></dc:creator><pubDate>Tue, 06 Nov 2012 16:33:41 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 16:36:23 GMT]]></title><description><![CDATA[<p>Coder007 schrieb:</p>
<blockquote>
<p>ich brauche die queue nur gegen einen stack auswechseln...dann habe ich eine DFS...</p>
</blockquote>
<p>Ist mir schon klar, aber was ist die Frage?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268213</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268213</guid><dc:creator><![CDATA[tnagraan]]></dc:creator><pubDate>Tue, 06 Nov 2012 16:36:23 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Tue, 06 Nov 2012 17:14:19 GMT]]></title><description><![CDATA[<p>Coder007 schrieb:</p>
<blockquote>
<p>wie kann ich die BFS in eine DFS umwandeln?</p>
</blockquote>
<p>Ich denke indem du die Queue durch nen Stack ersetzt.</p>
<blockquote>
<p>Kann man das noch eleganter lösen als mit stack oder queue?</p>
</blockquote>
<p>Müsste sich schön machen lassen wenn du im Iterator zusätzlich zum aktuellen Knoten auch den nächsten zu besuchenden Knoten abspeicherst (oder alternativ den vorigen Knoten - ist im Prinzip das selbe).</p>
<p>Dann weisst du immer was der letzte Schritt war, und kannst daraus den nächsten ableiten.</p>
<p>Bei &quot;runter&quot; nimmst du als nächstes die erste verfügbare Richtung aus: links-runter, rechts-runter, hoch.<br />
Bei &quot;von-links-kommend-hoch&quot; nimmst du als nächstes die erste verfügbare Richtung aus: rechts-runter, hoch.<br />
Und bei &quot;von-rechts-kommend-hoch&quot; nimmst du als nächstes: hoch.</p>
<p>Und wenn nix mehr geht (kein &quot;hoch&quot; mehr da) bist du fertig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268251</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 06 Nov 2012 17:14:19 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 09:51:06 GMT]]></title><description><![CDATA[<p>Ich mache es immer ähnlich wie der TO. Was meinst Du denn mit &quot;eleganter&quot;? Codemäßig wäre vermutlich ein rekusriver Algorithmus eleganter. Aber von der Praktikabiltät und Flexibilität her, ist die Nachbildung der Rekursion über die passenden Container schon ziemlich optimal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268471</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 07 Nov 2012 09:51:06 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 11:06:15 GMT]]></title><description><![CDATA[<p>Öh...<br />
Wen sprichst du jetzt an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268495</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Nov 2012 11:06:15 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 11:33:30 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Öh...<br />
Wen sprichst du jetzt an?</p>
</blockquote>
<p>Den TO. Steht da sogar. <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/2268503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268503</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 07 Nov 2012 11:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 12:19:59 GMT]]></title><description><![CDATA[<p>Nein, steht da nicht.<br />
Da steht <em>&quot;Ich mache es immer ähnlich wie <strong>der TO</strong>. Was meinst <strong>Du</strong> denn mit ...&quot;</em>.<br />
Das &quot;der TO&quot; (3. Person) im ersten Satz impliziert dass du jmd anderen ansprichst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268519</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268519</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Nov 2012 12:19:59 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 13:00:31 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Nein, steht da nicht.<br />
Da steht <em>&quot;Ich mache es immer ähnlich wie <strong>der TO</strong>. Was meinst <strong>Du</strong> denn mit ...&quot;</em>.<br />
Das &quot;der TO&quot; (3. Person) im ersten Satz impliziert dass du jmd anderen ansprichst.</p>
</blockquote>
<p>Ist ja gut. Irgendwie übellaunig, heute?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268536</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268536</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 07 Nov 2012 13:00:31 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 13:51:55 GMT]]></title><description><![CDATA[<p>Man kann jedoch implizieren, dass er den TO meint, weil elegant im ersten Satz des OP steht. Böse Zungen könnten sogar sagen, dass man das nur dann nicht erkennt, wenn man den OP nicht im Kopf hat, aber das wäre natürlich albern und hier auch gar nicht zutreffend. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268560</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Wed, 07 Nov 2012 13:51:55 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 15:14:01 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Nein, steht da nicht.<br />
Da steht <em>&quot;Ich mache es immer ähnlich wie <strong>der TO</strong>. Was meinst <strong>Du</strong> denn mit ...&quot;</em>.<br />
Das &quot;der TO&quot; (3. Person) im ersten Satz impliziert dass du jmd anderen ansprichst.</p>
</blockquote>
<p>Ist ja gut. Irgendwie übellaunig, heute?</p>
</blockquote>
<p>Nein. Dein Beitrag war nur nicht zu verstehen, also hab ich nachgefragt.<br />
Dann schreibst du &quot;steht sogar da&quot;, was es aber nicht tut, und ich hab mir die Freiheit genommen darauf hinzuweisen.<br />
Irgendwie empfindlich, heute?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268595</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268595</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Nov 2012 15:14:01 GMT</pubDate></item><item><title><![CDATA[Reply to BFS vs DFS on Wed, 07 Nov 2012 16:24:32 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/22559">@Eisflamme</a><br />
Wenn da erst &quot;der TO&quot; steht, und dann im nächsten Satz auf einmal &quot;Du&quot;, ohne einen Hinweis darauf dass hier ein Wechsel der Ansprechperson stattgefunden hat (von &quot;die Allgemeinheit&quot; zu &quot;der TO&quot;) ...<br />
Dann ist für mich klar dass das &quot;Du&quot; im 2. Satz nicht an den TO gerichtet sein kann, denn sonst wäre im ersten Satz ja auch schon &quot;Du&quot; gestanden.</p>
<p>Von daher war ich mir wirklich nicht 100% sicher wen er meint.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2268616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2268616</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 07 Nov 2012 16:24:32 GMT</pubDate></item></channel></rss>