假设我有一些带有节点和子节点的树结构。当我看到某些节点时,我想穿过树,大喊。
请看以下内容,这是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'行,我想“跳”到下一组孩子,但当然我回去时我已经失去了对上面父母的引用。通常的方法是什么?
答案 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);
}
}