我一直对着这一天一直打着头。时间新眼睛。祖先的宝石“扁平的树”
我有一个使用祖先宝石的树型结构模型。很好的工作,并呼吁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