2012-07-22 3 views
1

"100101" 과 같은 바이너리 시퀀스에서 트리를 이진 파일로 만들려고하는데 다음과 같이 트리를 생성하고 싶습니다. 값 (예 : 값 = "1001")파이썬에서 바이너리 시퀀스로부터 이진 트리 생성하기

문자열 순서가 될 것입니다 :
       <Root node> 
            | 
            1 
           /
            0 
           /
           0 
           \ 
            1 
           /
           0 
           \ 
            1 

그래서 내가 여기했던 코드입니다 (기본적으로 1 수단은 오른쪽으로 가서 0 수단은 왼쪽으로 이동)
def _inserto(root,value): 
    for i in value: 
     if root == None: 
      root = BSTNode(i) 
      current = root 
     elif i == "1": 
      if current.right is not None: 
       current.right = BSTNode(i) 
       current = current.right 
      else: 
       current.right = BSTNode(i) 
       current = current.right 
     elif i == "0": 
      if (current.left is not None): 
       current.left = BSTNode(i) 
       current = current.left 
      else: 
       current.left =BSTNode(i) 
       current = current.left 
    return root 

이제 문제는 내가 입력에 "01"와 같은 다른 순서를 원하는 경우, 나무가이

      <Root Node> 
           | 
           1 
          /
           0 
          /\ 
          0 1 
          \ 
           1 
          /
          0 
          \ 
           1 

과 같아야합니다,하지만 내 기능이기 때문에 난 정말, 힘든 시간을 보내고하고 있다는 것입니다 지 오래된 나무를 덮어 쓰려고합니다.

+2

* 정확하게 * 문제가되는 부분은 무엇입니까? 파이썬에서도 마지막 노드에 대한 외부 참조를 유지할 수 있습니다. 파이썬에는 클래스와 객체도 있습니다. – Marcin

+0

"기본적으로 1은 오른쪽으로 이동하고 0은 왼쪽으로 이동 함을 의미합니다."Err ... 다이어그램에서 1은 왼쪽으로 이동한다는 의미입니다. 다이어그램이 잘못 되었습니까? 아니면 잘못된 방식으로 읽고 있습니까? –

+0

@MarkByers 다이어그램과'_insert'의 코드 사이에 "err ..."을 공유하고 있습니다. int의 루트를 1로 시작하고, 다음은 0 <1이므로 왼쪽으로 이동하지만 0은 <0이 아닙니다 , 그래서 그것은 오른쪽으로 가야한다. (그러나 왼쪽으로가는 것으로 보인다.) 나는 OP가 세 가지 가능한 결과 중 어느 것이 실제로 원하는 것인지를 명확히하기를 바라고있다. –

답변

2

문제는 기존 노드를 다루는 코드 때문입니다. 존재하는 경우, 코드는 새로운 BSTNode로이를 겹쳐 쓰며 그 아래에있는 모든 기존 노드를 손실합니다. 이 내용은 다음 하나 이미 존재하지 않는 경우 노드를 할당 할 것이다

elif i == "1": 
     if current.right is None: 
      current.right = BSTNode(i) 
     current = current.right 
    elif i == "0": 
     if root.left is None: 
      current.left = BSTNode(i) 
     current = current.left 

이 새로운 노드에 현재 설정 : 당신이 필요로하는 것은 같은 일입니다.