我一直對着這一天一直打着頭。時間新眼睛。祖先的寶石「扁平的樹」
我有一個使用祖先寶石的樹型結構模型。很好的工作,並呼籲TreeNode.arrange
返回一個整齊的小散列,這是一個嵌套的樹。問題是我正在尋找一個「扁平化的樹」,因爲缺乏更好的描述。例如:
Node1
Node2
Node3
Node4
Node5
Node6
Node7
Node8
Node9
與之相對更傳統的
Node1
Node2
Node3...
因此,換句話說,我只是想「縮進」我的樹,如果有一個分支點(不止一個孩子)。我想最好的方法是遞歸函數。我試過幾個變種,我只是一片空白就這一個: - \
def walk_until_fork(tree_hash,&blk)
tree_hash.each do |node,children|
yield node.title
if children.keys.length > 1
#fork point
children.each do |subnode,grandchilden|
walk_until_fork(grandchilden,&blk)
yield subnode.title
end
else
walk_until_fork(children,&blk)
end
end
end
調用該測試代碼叉點在輸出的底部,最終的結果是: - \
我真的很希望看到的是這樣的散列結構,但應該有孩子的唯一鍵是發生分支的位置(一個分支繼續在當前級別並且在該分支之後每個分支繼續)。
我不知道我是否清楚。如有需要,我會澄清任何問題。
請解釋UR節點(1-9 )再次...在節點1或節點2處的節點2處於同一級別是1級別低節點1。和Node3和Node4中的級別差異 –
節點是真正的節點Node1有一個Node2的子節點,Node2有一個Node3的子節點等等......但是我想「扁平化」節點樹,這樣如果只有一個父節點的孩子不需要分支。希望這可以幫助。我回答了我自己的問題,但也許別人會有更好的主意。 – Kansha