2016-12-09 6 views
0

私はこれをおそらく今日非常に単純な問題にしようとしてきました。特定の幅からのPythonツリーのトラバーサル

たとえば、次のような辞書があるとします。

di = {'a' : ['b','c','d'],c : ['g','j','k'],k : ['z','y']} 

私は、指定された要素よりもツリーの下側に表示される要素だけを書き出しようとしています。たとえば、get_low( 'a'、2)を呼び出すと、要素[g、j、k、z、y]が返されます。

私の試み:

def get_low(obj, level, children = [], generation = 0): 

    if level == 0: 
     children = [obj] 

    generation += 1 
    #print (generation, level) 
    for child in di[obj]: 
     if level <= generation: 
      children.append(child) 
      get_low(child, level,children, generation) 

    return set(children) 

このプリントが正しい値のいくつかは、二つのことは動作しませんが:1)それは含まれていませんOBJレベルがあれば)ゼロと2に設定されている場合私はレベルを例えばに設定した4の場合、空のset()は結果として投げられません。

ありがとうございました!

答えて

0

まあ、私は少し違うことをしましたが、私はそれが正しいノードを取得すると思う:

di = {'a' : ['b','c','d'], 'c' : ['g','j','k'], 'k' : ['z','y']} 

children = set() 

def get_low(obj, level): 
    if level==0: 
     children.add(obj) 
    level -= 1 
    if di.get(obj): 
     for i in di.get(obj): 
      if level<=0: 
       children.add(i) 
      get_low(i,level)  
    else: 
     return 

get_low('a', 2) 
print children 

例えばlevel=2ため結果は次のとおりです。level=0ため

set(['y', 'k', 'j', 'z', 'g']) 

は次のとおりです。

set(['a', 'c', 'b', 'd', 'g', 'k', 'j', 'y', 'z']) 

およびlevel=4の場合:

set([]) 
関連する問題