我有一个ArrayCollection,每个元素都是TreeNode类(我自己创建的一个自定义类)的一个实例,它有一个“children”属性,它是更多TreeNode元素的ArrayCollection。这样,我在ArrayCollection结构中有一个元素树:
tree = new ArrayCollection([
[new TreeNode(param1, param2, new ArrayCollection([
[new TreeNode(param1, param2, null)],
[new TreeNode(param1, param2, new ArrayCollection([
[new TreeNode(param1, param2, null)],
[new TreeNode(param1, param2, new ArrayCollection([
[new TreeNode(param1, param2, null)],
[new TreeNode(param1, param2, null)]
]))],
[new TreeNode(param1, param2, new ArrayCollection([
[new TreeNode(param1, param2, null)],
[new TreeNode(param1, param2, null)]
]))]
]))]
]))],
[new TreeNode(param1, param2, null)]
]);
TreeNode构造函数有3个参数:前两个没关系,但第三个是children属性(一个ArrayCollection),如果TreeNode没有任何子节点,那么该参数必须设置为null。 / p>
我编写了以下函数来递归地解析“树”结构:
private function parse(obj:Object):void {
for (var i:int = 0; i < obj.length; i++) {
if (obj[i] is TreeNode) {
if (obj[i].children != null) {
parse(obj[i].children);
}
} else {
parse(obj[i]);
}
}
}
parse(tree);
但我的问题是:我需要拥有与另一个类的实例相同的“树”结构(它不需要是同一个变量)。我怎样才能做到这一点?
答案 0 :(得分:0)
我做到了:
private function parse(obj:Object, ancestor:Node):void {
for (var i:int = 0; i < obj.length; i++) {
if (obj[i] is TreeNode) {
var node:Node = new Node(obj[i].param1, obj[i].param2);
node.ancestor = ancestor;
if (ancestor != null) {
ancestor.children.push(node);
}
if (obj[i].children != null) {
parse(obj[i].children, node);
}
obj[i] = node;
} else {
parse(obj[i], ancestor);
}
}
}
parse(tree, null);
这样,所有TreeNode都将转换为Nodes(Node是我制作的另一个自定义类)