回答
的STL集合和地圖都使用二叉樹內部
STD:地圖<>用一棵樹來實現,你可以利用這一點。這是目前我能想到的唯一的「標準庫樹形容器」。
默認情況下沒有STL類。你可以使用STL組件編寫自己的樹類,或者你可以給這個STL-像樹LIB一試:
加速有可能是你正在尋找一個PropertyTree容器。它基本上由存儲值和任意數量的子節點的節點組成。 Boost與標準相當接近。
http://www.boost.org/doc/libs/1_44_0/doc/html/property_tree.html
下面是一個創建分層樹(n進制沒有特殊屬性),使用STL容器的簡單方法。它不是預先構建的,但它很簡單,並且利用了一些STL屬性。要創建自己的搜索,你必須實現自己的算法,但這應該是相當輕鬆的。
template<typename T>
class TreeNode
{
public:
TreeNode()
{
}
TreeNode(const T& value)
: Value(value)
{
}
T Value;
std::list<TreeNode<T> > Children;
};
+1但是,我的問題的答案(http://stackoverflow.com/questions/6517231/are-c-recursive-type-definitions-possible-in-particular-can-i-put-a-vectort)表示這不是合法的C++。如果你可以在那裏發表一個令人信服的答案,我肯定會讚揚它並接受它。 – 2011-07-01 04:46:26
@ Bill:真的嗎?臭死了。我相信在這種情況下,它可以通過[pimpl](http://en.wikipedia.org/wiki/Opaque_pointer)來緩解,但這會使它變得更加骯髒,並且不必要地變得更慢。我想你總是可以使用鏈表。或者'std :: list
該死的我真的希望你會說這是完全合法的。它確實*工作*,作爲一個實用主義者,對我來說意義重大。你說得對,ptr版本是合法的,但它會讓我煩惱多少額外的複雜性。 – 2011-07-01 06:37:22
沒有可用於構建樹結構的標準庫容器。但是,如果你在理論上足夠了解並且對編程語言(在你的情況下是C++)沒問題,那麼創建一個通用樹並不是一件困難的任務。
從創建通用(模板化)節點開始,爲子項(二叉樹)添加兩個指針或爲子項(n元組)添加指針列表。
struct Node
{
int data;
Node *left;
Node *right;
}
你走了。創建一個實例並擁有根節點。創建更多節點並將它們作爲子節點附加到根節點。重複相同的操作。玩樹很棒!
你會在網上找到很多例子。有一個here 完全支持Niki的答案。
- 1. 在C++中表示一棵樹
- 2. C++繪製一棵樹
- 3. 二叉搜索樹 - 複製一棵樹到另一棵樹
- 4. 在C++中實現樹
- 5. 遍歷一棵樹
- 6. 按名稱遍歷一棵樹C++
- 7. Node類代表一棵二叉樹C++
- 8. SimpleXML:將一棵樹追加到另一棵樹
- 9. 如何解析一個公式在C#中建立一棵樹?
- 10. 在CakePHP中手動構建一棵樹
- 11. 在Clojure中代表一棵樹
- 12. 在Django中序列化一棵樹
- 13. 如何在R中走上一棵樹?
- 14. 急於在NHibernate中加載一棵樹
- 15. 如何將一棵樹分割成兩棵子樹
- 16. C#minimax樹實現
- 17. R * - 樹C實現?
- 18. C++ AVL樹實現
- 19. C++實現Splay樹
- 20. 畫一棵樹使用Qt
- 21. 構建一棵樹「向後」
- 22. 走一棵樹向後SQL
- 23. 創建一棵B型樹
- 24. 一棵樹的和絃
- 25. 在C++中遍歷一棵普通的樹
- 26. 隨機繪製500棵樹中的一棵林林包
- 27. 在C#中尋找後綴樹實現?
- 28. 穿越兩棵樹在一起?
- 29. 使用CakePHP樹行爲在一個表中有多棵樹
- 30. 在樹葉中放置一個節點4棵樹拖放
樹可以是地圖等東西中使用的基礎數據結構 - 您是否爲特定目的實現樹? – 2010-09-10 16:56:24
[爲什麼C++ STL不提供任何「樹」容器?](http://stackoverflow.com/questions/205945/why-does-the-c-stl-not-provide-any-tree-容器) – 2010-09-10 18:23:06