簡體   English   中英

擴展此設計用於樹重寫的最干凈方法是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM