通过树结构迭代

时间:2012-05-11 16:13:05

标签: actionscript-3

假设我有一些带有节点和子节点的树结构。当我看到某些节点时,我想穿过树,大喊。

请看以下内容,这是ActionScript,但它与Java等类似:

for(var i:int=0; i<parent.children.length; i++)
{ 
  child = parent.children[i];
  if(child.nodeName == "A")
  {
    parent = child;
    for(var j:int=0; j<parent.children.length; j++) 
    {
      child = parent.children[j];
      if(child.nodeName == "B")
      {
        trace("B found");
        parent = child;
        //now search for C etc...
      }
    }
  }
}

问题来自'parent = child'行,我想“跳”到下一组孩子,但当然我回去时我已经失去了对上面父母的引用。通常的方法是什么?

2 个答案:

答案 0 :(得分:2)

递归对于树来说是美好的事情:

public function walkTree(node:Tree)
{
    //here is where you want to check the node's name against your list of
    //'nodes to shout out about'
    trace("Node found: " + node.nodeName);


    for(var i:int=0; i < node.children.length; i++)
    {
        walkTree(node.children[i]);
    } 
}

注意:如果其中一个子节点可以拥有其父节点(或其父节点的父节点或其父节点的父节点等,),则递归是危险的,因为它将获得陷入了一个循环。使用递归时,请确保没有子引用父节点。

答案 1 :(得分:1)

创建一个遍历树并检查节点的递归函数?

一些代码:

public function traverse(parent:Node, node:Node, search:Array):void
{

    if (search.indexOf(node.nodeName) != -1)
        trace("Found " + node.nodeName);

    for(var i:int=0; i < node.children.length; i++)
    {
        traverse(node,node.children[i],search);
    }
}