2017-01-05 6 views
0

私は複数のネストされたツリー構造を持っています、そして、現在のレベルを返すために、再帰を使用して提供された文字列/ node.Iの現在のレベルを見つけようとしています。複数のネストされたツリーのpythonの再帰の中断

def dicq(self,value,current_level): 
    d = {} 
    for child in self.children: 
     if child.name == value: 
     print current_level 
     else: 
     (child.dicq(value,current_level+1)) 
    return current_level 


root.dicq('7.3',1) 

ルートは、ネストされたツリー構造であり、私はそれをし、1(最初の子供を意味するデフォルトレベル)7.3(私はのレベルを見つけていたノード)を与えています。 if文でcurrent_levelを出力するだけで正しいですが、if文でreturnを返してもreturn.Iはnode.Anyの候補を見つけるとすぐに現在のレベルを返したいのですか?

答えて

2

あなたの探しているwheatherノードに関係なく、コードはcurrent_levelを返しています。 対応するノードが見つかった場合にのみcurrent_levelを返す必要があります。一致しない場合は、一致するノードが見つからないことを示す何かを返します。また、結果が再帰レベルを超えて適切に伝播するようにする必要があります。また、一致が見つかった場合には、さらに見直しを行う必要があります。

ここには参考になるコードがあります。注:私はそれをテストしていません。

def dicq(self,value,current_level): 
    d = {} 
    retval = -1 
    for child in self.children: 
     if child.name == value: 
      retval = current_level 
     else: 
      retval = child.dicq(value,current_level+1) 
      if retval != -1: 
       break 
    return retval 

valueが見つかると、そのレベルが返されます。そうでない場合は、ツリーのその部分のどこにも見つからないことを示す-1が返されます。

+0

ありがとう私は単純なことに夢中だった:( – Zeist

関連する問題