2012-05-11 10 views
0

ノードと子を持つ何らかの種類のツリー構造があるとします。私は木の中を移動して、特定のノードを見ると叫びたい。次の木構造を反復する

見て、これは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... 
     } 
    } 
    } 
} 

問題は「親=子供のラインが付属して、私は子供の後、次のセットに「ジャンプ」したいですもちろん、私が元に戻ったとき、私は上記の親への参照を失ってしまった。これについての通常の方法は何ですか?

答えて

1

再帰は、ツリーの美しいものです:

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); 
    } 
} 
関連する問題