<?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[Tree]]></title><description><![CDATA[<p>Hallo miteinander</p>
<p>Ich wollte fragen, wie man in C++ die size wie auch die height eines tree's herauskriegt, wenn man allerdings keine Argumente in den Methoden hat. Also:</p>
<pre><code class="language-cpp">int tree::size() const
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">int tree::height() const
</code></pre>
<p>Das hpp-file sieht so aus:</p>
<pre><code class="language-cpp">#ifndef TREE_HPP
#define TREE_HPP

#include &quot;tree_node.hpp&quot;

class tree
{
public:
    tree();
    ~tree();

	int size() const;
	int height() const;

private:
    tree_node* _root;

};

#endif
</code></pre>
<p>Liebe Grüsse,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/285115/tree</link><generator>RSS for Node</generator><lastBuildDate>Fri, 21 Aug 2026 12:24:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/285115.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Apr 2011 11:12:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 11:12:09 GMT]]></title><description><![CDATA[<p>Hallo miteinander</p>
<p>Ich wollte fragen, wie man in C++ die size wie auch die height eines tree's herauskriegt, wenn man allerdings keine Argumente in den Methoden hat. Also:</p>
<pre><code class="language-cpp">int tree::size() const
</code></pre>
<p>bzw.</p>
<pre><code class="language-cpp">int tree::height() const
</code></pre>
<p>Das hpp-file sieht so aus:</p>
<pre><code class="language-cpp">#ifndef TREE_HPP
#define TREE_HPP

#include &quot;tree_node.hpp&quot;

class tree
{
public:
    tree();
    ~tree();

	int size() const;
	int height() const;

private:
    tree_node* _root;

};

#endif
</code></pre>
<p>Liebe Grüsse,<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049259</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 11:12:09 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 11:34:53 GMT]]></title><description><![CDATA[<p>Man müsste auch tree_node kennen, wie sieht das aus?</p>
<p>Wenn man die Höhe nicht mitspeichert und sie daher algorithmisch herausfinden muss, muss man eben alle Zweige durchgehen (rekursiv oder iterativ) und sich die größte Tiefe eben merken. Währenddessen kann man die Elemente natürlich auch mitzählen.</p>
<p>Angenommen, tree_node hat getLeft() und getRight(), wobei der Rückgabewert ein weiterer Knoten oder NULL ist, falls nicht gesetzt. Wie SeppJ im nächsten Posting sagt, kommt es drauf an. Meine Lösung wäre also für einen nicht-balancierten Binärbaum, der sich nichts gemerkt hat. Für andere Binärbäume könnte mein Algorithmus suboptimal sein, da seine Laufzeit O(n) ist.</p>
<pre><code class="language-cpp">class tree
{
private:
    int size_;
    int height_;
    tree_node* root_; // _ als Präfix könnte Probleme mit Compilern geben, davon ist also abzuraten!
    void recalculateSizeAndHeight(tree_node* currentNode, int oldHeight);

public:
    tree() : size_(0), height_(0) {}

    int getSize() const {return size_;}
    int getHeight() const {return height_;}

    void recalculateSizeAndHeight();
}; // Edit: Semikolon vergessen, peinlich; haut mich nicht

void recalculateSizeAndHeight()
{
    size_ = 0;
    height_ = 0;
    if(root_ != NULL)
        recalculateSizeAndHeight(root_, height_);
}

void recalculateSizeAndHeight(tree_node* currentNode, int oldHeight)
{
    ++size_;

    if(currentNode-&gt;getLeft() == NULL &amp;&amp; currentNode-&gt;getRight() == NULL)
    {
        if(height_ &lt; oldHeight_ + 1)
            height_ = oldHeight_ + 1;
    }
    else
    {
        if(currentNode-&gt;getLeft() != NULL)
            recalculateSizeAndHeight(currentNode-&gt;getLeft(), oldHeight + 1);
        if(currentNode-&gt;getRight() != NULL)
            recalculateSizeAndHeight(currentNode-&gt;getRight(), oldHeight + 1);
    }    
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049263</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 14 Apr 2011 11:34:53 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 11:26:32 GMT]]></title><description><![CDATA[<p>Das kommt 100% auf die Implementierung deines Baumes an. Im besten Fall hat er sich diese Dinge gemerkt (oder sie sind berechenbar, weil es ein bestimmter Baum ist, z.B. ein perfekt balancierter Baum) oder im schlimmsten Fall musst du eben durchzählen. Wie sollen wir das wissen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049264</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 14 Apr 2011 11:26:32 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 11:39:27 GMT]]></title><description><![CDATA[<p>gemerkt ... oder rekursiv:</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt; // std::max

// --   tree_node.hpp
struct tree_node
{
    int value_;
    tree_node* left_;
    tree_node* right_;
};

class tree
{
public:
    // ....
    int size() const;
    int height() const;

private:
    tree_node* _root;
}; 

int tree_size( const tree_node* nd )
{
    if( nd )
        return tree_size( nd-&gt;left_ ) + tree_size( nd-&gt;right_ ) + 1;
    return 0;
}
int tree::size() const
{
    return tree_size( _root );
}

int tree_height( const tree_node* nd )
{
    if( nd )
        return std::max( tree_height( nd-&gt;left_ ), tree_height( nd-&gt;right_ ) ) + 1;
    return 0;
}
int tree::height() const
{
    return tree_height( _root );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049272</guid><dc:creator><![CDATA[Werner_logoff]]></dc:creator><pubDate>Thu, 14 Apr 2011 11:39:27 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 12:13:18 GMT]]></title><description><![CDATA[<p>Wow Leute!<br />
Ganz grosse Klasse! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
..eigentlich konnte ich den Algorithmus scho raus lesen (hatte ähnliches im Sinn), aber trotzdem noch die tree_node-Klasse:</p>
<pre><code class="language-cpp">#include &quot;tree_node.hpp&quot;

tree_node::tree_node(const std::string&amp; content_) : _content(content_)
{}

tree_node::~tree_node()
{
    for(int i = 0; i &lt; _children.size(); ++i)
    {
        delete _children.at(i);
    }
}

bool tree_node::is_internal() const
{
    /* Muss ich noch machen ;) */

}

bool tree_node::is_external() const
{
     /* Muss ich noch machen ;) */

}

void tree_node::add(tree_node* node_)
{
    _children.push_back(node_);
}

int tree_node::size() const
{
     /* Muss ich noch machen ;) */

}

int tree_node::height() const
{
     /* Muss ich noch machen ;) */

}
</code></pre>
<p>Trotzdem aber die Frage:<br />
Ihr habt nun jeweils Argumente in den Methoden (-Klammern) verwendet. Die sind bei mir nicht vorgesehen. (heisst aber nicht, dass man es nicht ohne machen darf <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="😉"
    /> ) Trotzdem aber die Frage: Ist es ohne Argumente nicht auch möglich?</p>
<p>Das hpp-file zu tree_node sieht so aus:</p>
<pre><code class="language-cpp">#ifndef TREE_NODE_HPP
#define TREE_NODE_HPP

#include &lt;string&gt;
#include &lt;vector&gt;

class tree_node
{
public:
	tree_node(const std::string&amp; content);
	~tree_node();

    void add(tree_node*);

	bool is_internal() const;
	bool is_external() const;

    int size() const;
    int height() const;

private:
	std::string _content;

    std::vector&lt;tree_node*&gt; _children;
};

#endif
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2049284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049284</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 12:13:18 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 12:22:39 GMT]]></title><description><![CDATA[<p>Nein, die Methoden, die der Benutzer aufruft, haben keine Argumente. Weder bei Werner noch bei mir. Wenn wir uns die Mühe machen Dir Algorithmen zu schreiben, solltest Du Dir zumindest die Mühe machen, die in aller Ruhe zu lesen und zu verstehen, findest Du nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049290</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 14 Apr 2011 12:22:39 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 12:38:55 GMT]]></title><description><![CDATA[<p>Hast Recht!<br />
...genau das mach ich jetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049298</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049298</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 12:38:55 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 13:11:03 GMT]]></title><description><![CDATA[<p>Ach war ich wieder voreilig.<br />
Ihr seid super - es steht ja alles da, wonach ich suchte <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich habe allerdings noch eine inhaltliche Frage:<br />
Es wurde</p>
<pre><code>struct tree_node //...
</code></pre>
<p>benutzt. Was macht das genau, bzw. wozu steht das &quot;struct&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049311</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:11:03 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 13:16:54 GMT]]></title><description><![CDATA[<p>Werner hat einfach nur eine Definition für tree_node vorausgesetzt, weil Du Deine noch nicht geposted hattest. Da Du deine jetzt ja gezeigt hast, musste das halt entsprechend dafür umbauen.</p>
<p>Außerdem hast Du keinen Binärbaum, sodass Du sowieso etwas Transferleistung bringen musst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049317</guid><dc:creator><![CDATA[Eisflamme]]></dc:creator><pubDate>Thu, 14 Apr 2011 13:16:54 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 17:56:27 GMT]]></title><description><![CDATA[<p>Okey, vielen Dank!</p>
<p>Jeps, hab's soweit gemacht. Allerdings hab ich noch zwei Fragen:</p>
<p>1.) Wenn man sowas hat:<br />
if( nd )<br />
return //...<br />
dann prüft man einfach, ob &quot;nd&quot; vorhanden und korrekt gewählt ist, oder?</p>
<p>2.)Wie überprüft man, ob es sich um einen external_node (Blattknoten) handelt? ..also wie sieht die Idee dazu aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049535</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 17:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 18:07:42 GMT]]></title><description><![CDATA[<p>MaxC++ schrieb:</p>
<blockquote>
<p>1.) Wenn man sowas hat:<br />
if( nd )<br />
return //...<br />
dann prüft man einfach, ob &quot;nd&quot; vorhanden und korrekt gewählt ist, oder?</p>
</blockquote>
<p>Das ist im Prinzip äquivalent zu <code>if(nd!=NULL)...</code> - und wenn du unbenutzte Zeiger mit NULL vorbelegst, kannst du auf diese Weise prüfen, ob er belegt ist. Mit deinem vector&lt;&gt; kannst du dir die Überprüfung sparen (s.u.)</p>
<blockquote>
<p>2.)Wie überprüft man, ob es sich um einen external_node (Blattknoten) handelt? ..also wie sieht die Idee dazu aus?</p>
</blockquote>
<p>Wie ist denn der Begriff &quot;Blatt&quot; definiert - ein Knoten, der keine Nachfolger hat. Bei deinem Design ist das ganz einfach festzustellen, da alle Nachfolgerknoten in deinem <code>vector&lt;tree_node*&gt; _children;</code> untergrabracht sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049540</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 18:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 19:01:09 GMT]]></title><description><![CDATA[<p>Ahh..und ich dacht' schon, was die &quot;_children&quot; konkret sein sollen. <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>
<p>Eine Schlussfrage habe ich noch: Mein Compiler hat bei der tree_height-Methode etwas gejammert. Links- und Rechtsknoten gibt es bei mir ja eigentlich nicht - wie soll ich die Methode denn ohne li- re-Knoten implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049573</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:01:09 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 19:04:47 GMT]]></title><description><![CDATA[<p>Auch über die children-Liste - du bestimmst die Höhe jedes Unterbaums (die einzelnen Kinder können als Wurzeln eines kleineren Unterbaums betrachtet werden), nimmst davon das Maximum und addierst noch 1 (für die Wurzel selber).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049574</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 19:40:41 GMT]]></title><description><![CDATA[<p>Okey, also ich hab mal sowas gemacht:</p>
<pre><code class="language-cpp">int tree::height() const
{
	return std::max(_children.size()) + 1;    
}
</code></pre>
<p>..was aber nicht stimmen kann, da: _children ja eigentlich ein private-Argument ist und ich also nicht so direkt darauf zugreifen kann..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049590</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:40:41 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 19:46:18 GMT]]></title><description><![CDATA[<p>Nein, so klappt da nicht, du willst schließlich die maximale Höhe der Kinder haben und nicht die Größe der Kinder-Liste. Du mußt schon in einer Schleife über diese Liste laufen:</p>
<pre><code class="language-cpp">int kind_hoehe=0;
for(int i=0;i&lt;children.size();++i)
  kind_hoehe=std::max(kind_hoehe,children[i]-&gt;height();
return kind_hoehe+1;
</code></pre>
<p>(und als nächstes lernen wir dann, wie du das selbe mit den STL-Algorithmen hinbekommst :D)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049593</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 19:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 20:09:40 GMT]]></title><description><![CDATA[<p>Aber Frage: _children ist in tree_node.hpp private, d.h. dass man ja nicht direkt darauf zugreifen kann..<br />
(oder?)</p>
<p>STL-Algo? ..etwas einfacheres? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049610</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 20:17:51 GMT]]></title><description><![CDATA[<p>MaxC++ schrieb:</p>
<blockquote>
<p>Aber Frage: _children ist in tree_node.hpp private, d.h. dass man ja nicht direkt darauf zugreifen kann..<br />
(oder?)</p>
</blockquote>
<p>Die offensichtlichste Lsung ist dann wohl, diesen Code dorthin zu packen, wo du darauf zugreifen kannst - idealerweise wäre das die Methode tree_node::height().</p>
<blockquote>
<p>STL-Algo? ..etwas einfacheres? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
</blockquote>
<p>Nicht unbedingt einfacher, aber mitunter eleganter. Wenn du mehr darüber wissen willst, im Magazin gibt es noch einen alten Artikel von mir über die STL.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049613</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:17:51 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 20:35:38 GMT]]></title><description><![CDATA[<p>Okey, so hats eigentlich funktioniert.<br />
Nur: Kann ich die Methode in tree.cpp nicht mit<br />
&quot;tree_node::height()&quot; aufrufen?<br />
..ich frage so dumm, weil mein Compiler da leider anderer Meinung ist..</p>
<p>Gerne, da werd' ich nachher einen Blick rein werfen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049622</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:35:38 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 20:46:18 GMT]]></title><description><![CDATA[<p>Wenn du die Methode aufrufst, mußt du ihr auch sagen, für welches Objekt du sie anwenden willst - die Antwort heißt _root-height().</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049625</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Tree on Thu, 14 Apr 2011 20:52:09 GMT]]></title><description><![CDATA[<p>Ahh shit - das hab' ich eben auch gerade raus bekommen.<br />
..darauf hätt' ich eigentlich sofort kommen sollen..</p>
<p>However, jetzt funktioniert alles wie gwünscht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Vielen herzlichen Dank für die Unterstützung euch allen! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2049628</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2049628</guid><dc:creator><![CDATA[MaxC++]]></dc:creator><pubDate>Thu, 14 Apr 2011 20:52:09 GMT</pubDate></item></channel></rss>