2012-04-10 2 views
0

각 노드에 3 개의 데이터가 포함 된 이진 트리 함수가 있습니다. 그들은 ID 번호로 분류됩니다.이진 검색 나무와 파이썬 데이터

def findName(tree,name): 
    if tree==None: 
     return None 
    elif tree['name']==name: 
     return True 
    else: 
     findName(tree['right'],name) 
     findName(tree['left'],name) 

나는 항상에서 이름을 찾을 수 있습니다 그들은 또한

나는 이름 검색 기능을한다에 문제가있어 특정 기능, 그것은 다음과 같습니다 "이름"과 "마크」를 개최 나무. 그러나 나는 전방을 찾을 수 없다. 파이썬 유휴 상태에서 findName(tree['right'],name)을 입력하면 이름이 트리에 있으면 true가됩니다.

답변

3

함수가 실제로 일부 데이터를 반환하는 유일한 방법은 자체가 return 문을 사용하는 경우입니다. else: 제품군에 return 문이 없습니다. 이 두 가지에 검색하고 그 지점의 그것을 발견하면 반환 값이 True

+0

먼저 사용자 이름을 사랑합니다. : P and Yeah 나는 재귀 적이기 때문에 True를 반환 할 것이라고 생각했습니다. 고맙습니다. – Unknown

3

당신은 같이해야 할 것이다 사용할 수있는 오픈 소스 바이너리 검색 트리 모듈이 있다고 생각하십시오. 귀하의 목표가 BST에 대해 배우는 것이라면, 직접 작성하십시오. 그러나 오픈 소스를 사용할 수있는 작업을하고 있다면 이미 테스트 및 디버깅 된 통조림 모듈을 사용해보십시오.

저는 http://stromberg.dnsalias.org/~strombrg/treap/에 Python 용 BST와 같은 것을 사용합니다. 실제로 BST의 변형으로 BST에 임의의 순서로 키를 제공 할 필요가 없습니다. 각 노드에서 무작위 값을 사용하여 사물을 분산시킵니다. 프로그래머에게는 반복문을 반복 할 때 정렬 된 키를 제외하고는 사전과 같이 보이며 조회는 사전 (해시)만큼 빠르지 않습니다.

트랩은 80 년대 후반에 발견되었으므로 비교적 최근의 CS입니다. 그것들은 매우 포괄적 인 데이터 구조입니다. 같은 데이터에 접근하는 방법이 많을수록 트랩을 사용하는 것이 좋습니다.

사실, 당신이 묘사 한 것에서 볼 때, 키가 당신의 이름 인 사전 (해쉬 테이블)에 더 잘 서비스 될 수 있습니다.

0

I 될 수 있도록

return findName(tree['right'],name) or findName(tree['left'],name) 

다음 다른 사람에