选择性地收集树中的节点

我有一棵树(表达式),我只想收集某些类型的节点 - 那些遵循某种模式的节点。 我有一个简化的例子如下:

A = {{{{},{0.3,0.3}},{0.2,0.2}},{0.1,0.1}};
TreeForm[A, PlotRangePadding->0]
Cases[A, {x_Real, y_Real}, Infinity]

输出:

在这里输入图像描述

这是做这件事的好方法吗?

如果不是{x_,y_},如果我想查找{{x1_,y1_},{x2_,y_2}},我该如何排除像{x_,y_}这样的表达式,它们也匹配?

问候

编辑(14/07/2011)

我发现使用除List之外的头部将极大地帮助找到没有碰撞的这种子表达式。

例如,重新制定上述内容:

A = {{{{}, pt[0.3, 0.3]}, pt[0.2, 0.2]}, pt[0.1, 0.1]};
List @@@ Cases[A, _pt, Infinity]

输出:

{{0.3,0.3},{0.2,0.2},{0.1,0.1}}

关于你的问题的第二部分,即选择{{a,b},{c,d}} ,那么怎么样

b = {{{{}, {0.3, 0.3}}, {0.2, 0.2}}, {{0.1, 0.1}, {0.3, 0.4}}};
TreeForm[b]
Cases[b, {{a_, b_}, {c_, d_}} /; (And @@ NumericQ /@ {a, b, c, d}), Infinity]

(所以他们不必是Real但任何数字都可以)?


这里是acl使用的形式的替代方案,我发现更具可读性。

b = {{{{}, {0.3, 0.3}}, {0.2, 0.2}}, {{0.1, 0.1}, {0.3, 0.4}}};

With[{p = _?NumericQ}, Cases[b, {{p, p}, {p, p}}, -1] ]
链接地址: http://www.djcxy.com/p/35579.html

上一篇: selectively gathering nodes in a tree

下一篇: classification tree implementation in mathematica