<?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[Preorder-traversal in a tree]]></title><description><![CDATA[<p>Hi,</p>
<p>Im coding a preorder traversal for a Binary tree. The problem is here: if (temp-&gt;right) ... if a right node is existing i push it on the stack again and if(n) gets active and prints the same node again...how can i fix it?</p>
<pre><code>void pre_order_traversal(Node *n) {
		static stack&lt;Node*&gt; nodes;

		if (n) {
			nodes.push(n);

			cout &lt;&lt; n-&gt;value &lt;&lt; endl;

			pre_order_traversal(n-&gt;left);
		}

		if(!nodes.empty()) {
			Node *temp = nodes.top();
			nodes.pop();

			if (temp-&gt;right) {
				cout &lt;&lt; temp-&gt;right-&gt;value &lt;&lt; endl;

				pre_order_traversal(temp-&gt;right);
			}
		}
	}
</code></pre>
<p>The tree looks like this:</p>
<pre><code>10
  5     15
 4 6      16
3   7
     8
</code></pre>
<p>My preorder traversal output:</p>
<pre><code>10
5
4
3
6
6
7
7
8
8
15
15
16
16
0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/320398/preorder-traversal-in-a-tree</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Jul 2026 04:50:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320398.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 26 Sep 2013 19:15:32 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Preorder-traversal in a tree on Thu, 26 Sep 2013 19:15:32 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Im coding a preorder traversal for a Binary tree. The problem is here: if (temp-&gt;right) ... if a right node is existing i push it on the stack again and if(n) gets active and prints the same node again...how can i fix it?</p>
<pre><code>void pre_order_traversal(Node *n) {
		static stack&lt;Node*&gt; nodes;

		if (n) {
			nodes.push(n);

			cout &lt;&lt; n-&gt;value &lt;&lt; endl;

			pre_order_traversal(n-&gt;left);
		}

		if(!nodes.empty()) {
			Node *temp = nodes.top();
			nodes.pop();

			if (temp-&gt;right) {
				cout &lt;&lt; temp-&gt;right-&gt;value &lt;&lt; endl;

				pre_order_traversal(temp-&gt;right);
			}
		}
	}
</code></pre>
<p>The tree looks like this:</p>
<pre><code>10
  5     15
 4 6      16
3   7
     8
</code></pre>
<p>My preorder traversal output:</p>
<pre><code>10
5
4
3
6
6
7
7
8
8
15
15
16
16
0
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2355858</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355858</guid><dc:creator><![CDATA[James1]]></dc:creator><pubDate>Thu, 26 Sep 2013 19:15:32 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Thu, 26 Sep 2013 19:42:49 GMT]]></title><description><![CDATA[<p>Why do you want to use a list (in this the stack data structure) ?</p>
<p>Just do the following:</p>
<pre><code>void pre_order_traversal(Node *n)
{
    if ( !n )
        return;

    cout &lt;&lt; n-&gt;value &lt;&lt; endl; // your operation

    pre_order_traversal(n-&gt;left); // left subtree traversal
    pre_order_traversal(n-&gt;right); // right subtree traversal
}
</code></pre>
<p>(untested)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355865</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 26 Sep 2013 19:42:49 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Thu, 26 Sep 2013 22:33:33 GMT]]></title><description><![CDATA[<p>ok, that makes sense...but i want to implement a non recursive solution...thats why i used the stack...i should not call it recursive.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355886</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355886</guid><dc:creator><![CDATA[James1]]></dc:creator><pubDate>Thu, 26 Sep 2013 22:33:33 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 01:40:54 GMT]]></title><description><![CDATA[<p>James1 schrieb:</p>
<blockquote>
<p>ok, that makes sense...but i want to implement a non recursive solution...thats why i used the stack...i should not call it recursive.</p>
</blockquote>
<pre><code class="language-cpp">void pre_order_traversal(Node *n) {
        stack&lt;Node*&gt; to_do;
        //assert(n);
        to_do.push(n);

        do {
            Node* parent = to_do.top();
            nodes.pop();

            cout &lt;&lt; current-&gt;value &lt;&lt; '\n';//nicht endl bitte
            if(current-&gt;left) to_do.push(current-&gt;left);
            if(current-&gt;right) to_do.push(current-&gt;right);
        } while(!to_do.empty());
    }
}
</code></pre>
<p>ungetestet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355898</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 27 Sep 2013 01:40:54 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 01:52:30 GMT]]></title><description><![CDATA[<p>Ich denke, das müsste</p>
<pre><code class="language-cpp">void pre_order_traversal(Node *n) {
    if(!n) return;

    stack&lt;Node*&gt; to_do;
    to_do.push(n);

    do {
        Node* current = to_do.top();
        nodes.pop();

        cout &lt;&lt; current-&gt;value &lt;&lt; '\n';//nicht endl bitte

        /* rechte Seite nach unten, damit sie nach der linken behandelt wird. */
        if(current-&gt;right) to_do.push(current-&gt;right);
        if(current-&gt;left ) to_do.push(current-&gt;left );
    } while(!to_do.empty());
}
</code></pre>
<p>heißen. Ebenfalls ungetestet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355899</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 27 Sep 2013 01:52:30 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 02:28:39 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Ich denke, das müsste</p>
<pre><code class="language-cpp">if(!n) return;

...

        /* rechte Seite nach unten, damit sie nach der linken behandelt wird. */
</code></pre>
<p>heißen. Ebenfalls ungetestet.</p>
</blockquote>
<p>Jo, was die Reihenfolge angeht, haste recht.</p>
<p>Gegen n==NULL zu testen, davon halte ich wenig. Den NULL-Aufruf erlaubt man nur gewohnheitsmäßig, um in der rekursiven Variante sich ein wenig Tipparbeit zu sparen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355901</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 27 Sep 2013 02:28:39 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 07:13:40 GMT]]></title><description><![CDATA[<p>Remember OP is english... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355916</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355916</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Fri, 27 Sep 2013 07:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 09:06:50 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>Remember OP is english... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
</blockquote>
<p>Die automatischen Übersetzer sind inzwischen gut genug.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2355928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355928</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 27 Sep 2013 09:06:50 GMT</pubDate></item><item><title><![CDATA[Reply to Preorder-traversal in a tree on Fri, 27 Sep 2013 10:08:23 GMT]]></title><description><![CDATA[<blockquote>
<p>Jo, about the order, hurry right.</p>
<p>To test against n == NULL, which I consider low. NULL is allowed to call only habit to save the recursive variant is a little typing.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/2355939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2355939</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Fri, 27 Sep 2013 10:08:23 GMT</pubDate></item></channel></rss>