2016-08-10 5 views
0

バイナリ検索ツリーのリーフノード(子ノードがないノード)のデータを "Leif"に変更する関数を作成しようとしています。現在、私は私のBSTのためにこのコードを持っている:Python BST、リーフノードのデータを変更

def add(tree, value, name): 
    if tree == None: 
     return {'data':value, 'data1':name, 'left':None, 'right':None} 
    elif value < tree['data']: 
     tree['left'] = add(tree['left'],value,name) 
     return tree 
    elif value > tree['data']: 
     tree['right'] = add(tree['right'],value,name) 
     return tree 
    else: # value == tree['data'] 
     return tree # ignore duplicate 

は基本的に、私は子ノードが存在しない場合に「レイフ」にDATA1で名前を変更する関数を作りたいです。これを達成するための最良の方法は何ですか?前もって感謝します。

+0

あなた自身で起動し、ここでコードと一緒に問題を投稿する必要があります。誰もあなたのために最初からすべてのコードを書いているとは思わないので... –

答えて

0

問題を簡単な関数で解決できる小さな問題に分割します。

from itertools import ifilter 


def is_leaf(tree): 
    return tree['left'] is None and tree['right'] is None 


def traverse(tree): 
    if tree is not None: 
     yield tree 
     for side in ['left', 'right']: 
      for child in traverse(tree[side]): 
       yield child 


def set_data1_in_leafes_to_leif(tree): 
    for leaf in ifilter(is_leaf, traverse(tree)): 
     leaf['data1'] = 'Leif'