트리구조 -프로그래밍(파이썬) 과제 해결좀해주세요..

트리구조 -프로그래밍(파이썬) 과제 해결좀해주세요..

작성일 2022.12.02댓글 1건
    게시물 수정 , 삭제는 로그인 필요

#트리는 노드로 이루어진 자료구조
class Node:
  def __init__(self, value, left=None, right=None):
    self.value = value
    self.left = left
    self.right = right

  def preorder(self):
    pass # 프로그램 작성 필요
        
    
  def inorder(self):
    if(self.left != None):
      self.left.inorder()
    print(self.value, end='\t')
    if(self.right != None):
      self.right.inorder()

  def postorder(self):
    pass # 프로그램 작성 필요

  def search(self, value):
    if(self.value == value):
      return self
    elif(self.value > value):
      if(self.left != None):
        return self.left.search(value)
    else :
      if(self.right != None):
        return self.right.search(value)

  def add(self, value):
    if(self.value == value):
      return
    if(self.value > value):
      if(self.left == None):
        self.left = Node(value)
      else :
        self.left.add(value)
    else:
      if(self.right == None):
        self.right = Node(value)
      else :
        self.right.add(value)

  def remove(self, value):
    pass # 프로그램 작성 필요

def build_tree(data):
  tree = Node(data[0])
  for x in data[1:]:
    tree.add(x)
  return tree

data = [5, 3, 7, 2, 4, 9, 6]
tree = build_tree(data)

# 트리 순회
print("중위 순회 :", end=' ')
tree.inorder()
print()

print("====================")
print("전위 순휘 : ", end=' ')
tree.preorder()

# 트리 검색
print("검색 :", end=' ')
v = 7
result = tree.search(v)
if(result == None):
  print("트리는 ", v, "값을 갖고 있지 않음")
else:
  print("트리는 ", result.value, "값을 갖고 있음")

'''
1. 전위 순회를 위한 preorder( ) 함수를 작성하고, 전위 순회 결과를 알아보자. 
2. 후위 순회를 위한 postorder( ) 함수를 작성하고, 전위 순회 결과를 알아보자. 
3. 노드를 삭제하는 remove( ) 함수를 작성하고, 7을 삭제해보자
'''
함수 부분.. 채워주세요.. ㅠ.ㅠ... 
설명 해주시면 정말 감사드리구요. 귀찮으시면, 그냥 코드만이라도 부탁드립니다. 알아서 이해해보겠습니다.ㅠㅠㅠ...



profile_image 익명 작성일 -

preorder / postorder는 간단히 print부와 재귀호출부의 순서를 바꾸는 것으로 구현할 수 있습니다.

remove 메서드 구현의 경우 상당히 복잡하므로 하단의 최종 코드와 제가 추가로 제공한 주석을 참고하시기 바랍니다.

#트리는 노드로 이루어진 자료구조 class Node: def __init__(self, value, left=None, right=None): self.value = value self.left = left self.right = right def preorder(self): print(self.value, end='\t') if(self.left != None): self.left.inorder() if(self.right != None):self.right.inorder() def inorder(self): if(self.left != None): self.left.inorder() print(self.value, end='\t') if(self.right != None): self.right.inorder() def postorder(self): if(self.left != None): self.left.inorder() if(self.right != None):self.right.inorder() print(self.value, end='\t') def search(self, value): if(self.value == value): return self elif(self.value > value): if(self.left != None): return self.left.search(value) else : if(self.right != None): return self.right.search(value) def add(self, value): if(self.value == value): return if(self.value > value): if(self.left == None): self.left = Node(value) else : self.left.add(value) else: if(self.right == None): self.right = Node(value) else: self.right.add(value) def remove(self, value): if self is None: return # 더 노드가 없으면 None 반환 if self.value < value: # 우로 재귀호출해 탐색 self.right = self.right.remove(value) elif self.value > value: # 좌로 재귀호출해 탐색 self.left = self.left.remove(value) else: # 지울 값과 노드 내 값이 일치하면 # 왼쪽 자식이 비었으면 우측 자식으로 자신을 대체 if self.left is None: temp = self.right self = None return temp # 오른쪽 자식이 비었으면 좌측 자식으로 자신을 대체 elif self.right is None: temp = self.left self = None return temp else: # 오른쪽 subtree 중 가장 작은(왼쪽) 자식으로 자신을 대체 temp = self.right # 대체할 대상 while temp.left: temp = temp.left # value를 대체하고, self.value = temp.value # 오른쪽 subtree에서 해당 값을 없애버리기 (재귀) self.right = self.right.remove(temp.value) return self def build_tree(data): tree = Node(data[0]) for x in data[1:]: tree.add(x) return tree data = [5, 3, 7, 2, 4, 9, 6] tree = build_tree(data) # 트리 순회 print("중위 순회 :", end=' ') tree.inorder() print() print("====================") print("전위 순휘 : ", end=' ') tree.preorder() # 트리 검색 print("검색 :", end=' ') v = 7 result = tree.search(v) if(result == None): print("트리는 ", v, "값을 갖고 있지 않음") else: print("트리는 ", result.value, "값을 갖고 있음")

과학 과제 연구 주제

... 선정 좀 해주세요 수학과 관련된 과학 과제 연구 주제를... 문제를 해결하는 등의 연구를 할 수 있습니다. 네트워크 이론과 그래프 이론: 다양한 네트워크 구조를 수학적으로...

구조역학 문제좀 풀어주세요?

구조역학 과제 부탁드림니다. 풀이 과정도 설명 해주세요.너무막막해서 태양신님께 올려봅니다. 물리학과... 해결 방법: 1. 응력은 단위 면적당 힘으로 정의됩니다. 따라서...

과제인데 이 열여섯문제 해결좀해주세요..

... 그릇·조상·구조물 등) 및 그 기법. 테라코타는 대체로... - 대재를 용이하게 채취할 수 있고, 대형 구조재로 사용... 내장, 구조재 건축용으로 경계석,판석,석등,묘비석등에...

장교 장기복무

... 계층구조의 조직이며, 일반적인 시각에서도 보다 많은... 클릭해주세요... https://www.drspark.net/jia_current/6105797 ▣ [인사정책적 과제 해결방안 3: 부사관 진급 상한선 철폐와...

sk 글로벌사태에 대해 설명좀 해주세요,,

... 기업구조가 어떻게 되있는거고 sk 글로벌의 처리가 어떻게 돼야 하는지 설명좀 해주세요,, 어떻게 돼고 있다는... 방식으로 해결했다. 동시에 JP모건에 문 제의 주식을...

ppt 주제 추천해주세요!!

... 주제 추천 좀 해주세요!!! 몇가지 예시 주제입니다.... 직면한 과제 (고령화 사회, 저출산, 경제 양극화 등) 해결 방안 제시 미래 사회의 변화와 대비: 인구 구조 변화...