[英]What is the cleanest way to extend this design for tree-rewriting?
我有一棵對象樹,其中每個對象都有一個指向其子代的指針的std::vector
。 對象的類具有rewrite()
方法,該方法以遞歸方式應用於更改對象及其子對象,通常采用以下轉換,其中[N]
是要重寫的對象, (M)
是rewrite()
返回的元素:
(A) [A] / \ [A] / \ --> B X | --> (B) B C \ B C
擴展此設置以允許進行此類轉換的最干凈方法是什么?
A X | / \ [B] --> C A | | C (Y)
也就是說,那些重新樹的根,移動元素,插入新元素並返回插入的元素的元素。 我很難提出一些很好的東西,它也涉及最少的重構。 有什么想法嗎?
看起來,為了提高速度,您需要一個從每個子節點到其父節點的“反向指針”。 這樣一來,您就可以按照父指針的鏈進行操作,如果給定了指向到根的任何節點的指針,那么這就是您所需要的(我不確定您打算如何在僅給出指向內部節點的指針的情況下找到根) ,沒有backpointer?)。 當然,每當您重新排列樹時,都需要調整后向指針以及“子級” std::vector
,這是信息輕微重復的不幸結果(不多於兩次)鏈表顯示;-),但是為這種雙向導航的便捷性和速度付出了很小的代價。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.