2010-01-16 4 views
3

리스트에서 값을 이진 트리로 읽는 방법을 알고 싶었습니다. 내가 이런 삼각형이 :이파이썬에서 주어진 데이터로부터 이진 트리를 생성합니다.

class node: 
    def __init__(self,data,left=None,right=None): 
     self.data=data 
     self.left=left 
     self.right=right 

같은 클래스 노드를 작성했습니다

  0 
     1 2 
    3 4 5 
    6 7 8 9 

는 기본적으로 내가 무엇을 원하는이

노드 같은 (0, 노드 (이다 1), node (2))

큰 삼각형을 처리 할 수있는 재귀 함수를 만들고 싶습니다. 어떻게해야할지 내가 어떻게 말해 줄 수 있니?

편집 : 분명히 이진 트리가이 문제에 접근하는 방법이 아닙니다. 내가 기본적으로 알아 내고 싶은 것은 위에서 아래로 모든 다른 조합입니다. 같은 0,1,3,6 0,2,5,8 등

+1

숙제에 태그를 지정해서는 안됩니까? –

+0

만들려는 함수의 목록 입력과 예상 트리 출력은 무엇입니까? – ddaa

+0

이것은 기능 코드와 같습니다. 노드에 대문자를 써서 클래스의 이름을 지정하는 표준을 따르도록합니다 (지금은 함수처럼 보입니다). 문제가 정확히 무엇입니까? – Roman

답변

1

이 숙제 같은 소리 않습니다, 그래서 코드를 작성하지만, 여기에 힌트의 부부되지 않습니다

  1. 이것은이 전체 이진 트리가 (당신의 삼각형을 가정하는 것은 잘못이며, 세 번째 행이 실제로 3 4 5 6 될 예정이다)처럼 보인다 때문에 0 1 2 3 4 5 6 7 8 9

  2. 처럼, 당신의 삼각형 목록으로 기록 된 경우에도 수행 할 수 자식이 필요한 다음 부모 인 머리를 가진 parents 큐를 유지 관리 할 수 ​​있습니다. 특히 재귀를 추천하지는 않습니다.

전체 이진 트리는 각 리프가 아닌 노드에 정확히 두 개의 자식이있는 것입니다. 이것이 전체 이진 트리가 아닌 것으로 가정하면 문제를 해석 할 수있는 결정적인 방법이 없습니다 (노드 1과 노드 2 각각에 그림이있는 한 1 ~ 2 개의 자식이있을 수 있기 때문에). 이러한 목록

+0

나는 projecteuler에서 퍼즐에 대한 도움이 금지되면, 내가 미안하다는 것을 알고 있기 때문에이 사이트에 처음 온 것이다. 이 문제에 대한 해결책은 pyeuler 사이트에서 가능하지만 아무 것도 이해할 수 없었습니다. 삼각형의 구조는 나무를 사용하여 해결할 수 있다는 인상을주었습니다. 그래서 나는 내 이론을 시험해보고 막 다른 골목에 빠뜨릴 생각을했습니다. – johne

+0

아니요, 금지되지 않았습니다. 그러나 당신이 가지고있는 문제의 명세는 이상하게 보입니다. 링크가 있습니까? 아니면 문제 성명을 다시 점검하고 개정 할 수 있습니까? – danben

0

:

a = 'aBCdef' 

아래 프로그램이 다음과 같은 구조가 생성

- a - 
- B C 
B C - 
- d e 
d e f 
e f - 

코드 (입력리스트가 '전체'삼각형에 대응하는 것으로한다) :

class Node: 
    def __init__(self,data,left=None,right=None): 
     self.data=data 
     self.left=left 
     self.right=right 

    def __unicode__(self): 
     return '%s %s %s' % (
       self.left.data if self.left or '-', 
       self.data, 
       self.right.data if self.right or '-') 


nodelist = [Node(c) for c in a] 

i,y = 0,1 

while True: 
    for x in range(y): 
     nodelist[i].left = nodelist[i-1] if x!=0 else None 
     nodelist[i].right = nodelist[i+1] if x!=y-1 else None 
     i+=1 
    if i<len(a): 
     y+=1 
    else: 
     break 

for n in nodelist: 
    print unicode(n) 
관련 문제