在通過的過程中,我問了很多關於樹形數據結構的問題,但似乎我沒有在C++中採用正確的方式。創建一個樹形數據結構 - 不同的方法
在我編寫數據結構的方式中,我無法想象如何擁有「結束」或「開始」迭代器。因此,我已經採取了將所有功能作爲成員方法的方法。而不是使用迭代器的標準方法&算法。
現在我的樹結構的目標是:1)儘可能快地將分支從一棵樹移動到另一棵樹。 2)每個分支應該是自己的一棵樹。並且在樹上執行的操作也應該能夠在分支上執行。
我所做的只是創建一個包含矢量的類。 - 矢量內部是這個類的其他對象。示例(我只發佈一個小例子,在這裏,因爲我現在面臨的最大問題是該類實在太大處理):
template <typename ValTy>
class Tree {
private:
std::vector<std::unique_ptr<Tree> > subtrees;
ValTy value;
};
正如你可以用這個看到我就可以拿東西出來的subtrees
- 並將其用作樹或複製它。 但是,由於頂級樹沒有關於有多少個子樹(或多少個級別)的說明,因此不可能聲明「結束迭代器」?而像std :: find()這樣的算法不會遍歷整個樹(以及它的所有子樹)?
是否有可能利用這些算法可能,同時仍然維持簡單的「分支」結構?
等一下,如果我理解正確,頂層有一個樹中每個節點的條目? (樹中的每個節點都是一個新的級別,它包含一個子樹向量,所以最高級別需要爲每個節點添加一個新的子樹 - 迭代器對)。我猜這個「有效」,但不是非常低效? - 你(重新)移動分支需要迭代到頂層並修改它? – paul23 2012-01-17 15:16:30
@ paul23:不,* iterator *在樹的每個級別的堆棧上都有一個元素。這需要O(log n)空間來迭代一棵樹,但如果樹中沒有父指針,則無法避免。 – thiton 2012-01-17 15:20:59