试试这个:
def search(node, name):
self_result = [node['id']] if node['name'] == name else []
if not node['left'] and not node['right']:
return self_result
elif node['left'] and not node['right']:
return self_result + search(node['left'], name)
elif not node['left'] and node['right']:
return self_result + search(node['right'], name)
else:
return self_result + search(node['left'], name) + search(node['right'], name)
test_tree = {'id':0, 'name': 'a',
'left': {'id':1, 'name': 'a',
'left':{'id':3, 'name':'c',
'left':{'id':4,'name': 'd',
'left' : None,
'right' : None},
'right':None},
'right':{'id':4, 'name':'e',
'left': None,
'right': None}
},
'right': {'id':5, 'name':'c',
'left': {'id':6, 'name':'e',
'left': None,
'right': None},
'right': {'id': 7, 'name': 'a',
'left' : {'id' : 8, 'name': 'b',
'left': None,
'right' : None},
'right' : None
}
}
}
if __name__ == '__main__':
assert search(test_tree, 'a') == [0, 1, 7]
assert search(test_tree, 'b') == [8]
assert search(test_tree, 'c') == [3, 5]
assert search(test_tree, 'e') == [4, 6]
print 'ok'
它还可以处理多个匹配项。