[英]Tree splitting(extracting) algorithm
在最簡單的情況下,我有兩棵樹(有向圖),每個樹節點都有一個唯一的ID,並且可以有多個子代,其中第二棵樹的所有葉子都包含在第一棵樹的葉子中。 基於葉子,我想將第一棵樹分成兩棵樹,這樣新的第一棵樹將不包含原始第二棵樹的任何葉子,而新的第二棵樹將包含原始第二棵樹的所有葉子。 訣竅還在於,如果節點的所有子代都將移至新的第二棵樹,則節點本身也應移至該位置。
例如,將這兩個樹作為輸入:
結果,我想得到兩棵新樹:
實現這一目標的最佳方法(算法)是什么?
從第一棵樹中刪除節點很簡單,但是我有一個問題,如何在合適的地方從第一棵樹構造第二棵樹重用節點。
我正在嘗試在Java版本1.7中實現此拆分(我不能使用1.8)。
我能夠提出一種解決方案,下面的答案中有更多詳細信息,但是如果有人會提供更好的解決方案,我也會很高興的:)
我想出了解決我的問題的方法,也許對任何人都有用。 我的算法如下:
不知道我是否說得足夠清楚。 如果沒有,請檢查BitBucket TreeSplitter上可用的浸漬 。
該解決方案可能不是最佳解決方案,因此,如果您有更好的方法,可以將其發布為答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.