2017-04-12 6 views
0

나는 각 노드가 "order"에 의해 주어진 많은 수의 자식들을 가지지 만 (각 자식은 하나의 노드만을 가짐) 트리에 대한 파이썬 클래스를 생성한다. 나는 인덱스 i에있는 노드의 자식을 리턴하는 메소드 children (self, i)을 가지고있다. parent (self, i)를 구현하여 인덱스 i에 자식의 부모를 가져와야합니다.Python - 플랫 목록 트리 구현 : 주어진 자식, 부모 얻을?

class Tree: 
    def __init__(self, order=2, l=[]): 
    self._tree = l 
    self._order = order 

    def children(self, i): 
    left = self._tree[(i+1)*self._order-1] 
    right = self._tree[(i+1)*self._order] 
    return [left, right] 

    def parent(self, i): 
    if i>len(self._tree): 
     return ValueError 
    elif i==0: 
     return None 
    else: 
     #get parent of node i 

순서 = 2 및 목록으로 표시 예 트리 [45, 2, 123, 1, 8, 40, 456]과 같을 것이다 : 여기

는 지금까지이 무엇

 45 
    / \ 
    2  123 
/\ / \ 
1 8 40 456 

나는 내가 아이들 (자기, 나는)을 위해 사용한 방법을 뒤집을 수있는 방법이 있음을 알고 있지만 어떻게 확신 할 수는 없다.

+0

n은 매개 변수로 간주됩니까? 아니면 항상 이진 트리가 될까요? – user2357112

+0

죄송합니다. 어린이 수는 "주문"입력으로 주어집니다. 더 명확하게 편집하기 –

+0

당신의'children' 메소드가 파기되었습니다. 정확히 2 명의 자녀가 있다고 가정합니다. – user2357112

답변

0

당신은 역 동작 할 것이다 : 구현은 이진 트리를 위해 노력하고 있습니다

else: 
    #get parent of node i 
    return self._tree[(i-1)//self._order] 

주 (당신은 두 아이,하지 N을 반환). 이를 다음과 같이 수정하십시오.

+0

감사합니다! 이것은 완벽하게 작동합니다. –