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...
      }
    }
  }
}

問題は「親=子」の行にあります。次の子のセットに「ジャンプ」したいのですが、もちろん、戻ったときに上の親への参照が失われました。これを行う通常の方法は何ですか?

4

2 に答える 2

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つがその親(またはその親の親、またはその親の親の親など)を持つことができる場合、再帰はループに巻き込まれるため危険です。再帰を使用するときは、子が親ノードを参照しないようにしてください。

于 2012-05-11T16:23:41.290 に答える
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);
    }
}
于 2012-05-11T16:21:01.030 に答える