2017-12-19 22 views
0

각 노드가 자식 노드에 연결되어있는 비 - 이진 트리를 설정하는 프로그램을 만들려고합니다. 이 테스트 예제에서는 간단히하기 위해 이진 트리를 사용했습니다. 입력 내용은 다음과 같습니다.비 - 이진 트리 재귀

1 
3 5 
4 6 

(탭 문자는 숫자 사이에 사용됩니다).

4 
/
    3 
/\ 
1 6 
\/
    5 
    \ 
    4 
: 트리 다이어그램은 다음과 같이 보일 수 나는 그 아이가 3, 5 인으로, 루트 (1)에서 시작하여 트리를 생성하기 위해 노력하고, 그 각 노드는 아이들 4, 6 이

내 트리에 자식을 추가하려고하면 내 재귀 함수를 호출하는 무한 루프가 생성됩니다. 나는 루프에 1 인 지점 함수를 호출 그것에 문제를 좁혀하지만, 여기에 코드입니다했습니다

# input is a list of branch values 
file = open("treehash.txt","r") 
input = file.readlines() 
for line in range(len(input)): 
input[line] = input[line].rstrip().split('\t') 
file.close() 

# create the tree node 
class Tree(object): 
    value = None 
    children = [] 
    def __init__(self, value): 
     self.value = value 

# adds all children to a given parent 
def set_children(parent, branch): 
    if branch < len(input) - 1: 
     for num in input[branch + 1]: 
      parent.children.append(Tree(int(num))) 
     for child in parent.children: 
      set_children(child, branch + 1) 

# store all roots in array 
roots = [] 
for root in range(len(input[0])): 
    roots.append(Tree(int(input[0][root]))) 
    set_children(roots[root], 0) 
+0

4 경우, 6, 당신이 그래프 아닌 나무가있다. – Blckknght

+0

4와 6은 3과 5에 고유합니다.이 예에서 각각 두 번입니다. 그러나 여러 뿌리로 시작할 경우 그래프가 있다고 가정합니다. – adapap

답변

1

당신이

class Tree(object): 
    value = None 
    children = [] 

에 그랬던 것처럼 당신은 클래스 변수를 작성하는 경우 그들은 인스턴스가 아니라 클래스에 바인딩됩니다. value의 경우 __init__ 생성자에서 인스턴스 바인딩 된 변수로 덮어 쓰지 만 children이 나타내는 목록은 모든 Tree 인스턴스에서 공유됩니다.

는 변수 설정 위에 삭제하고 대신 사용 : 하나 이상의 부모가

class Tree(object): 
    def __init__(self, value): 
     self.value = value 
     self.children = []