Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

BFS 순회를 사용하여 트리의 노드를 표시하는 Python 프로그램

<시간/>

너비 우선 탐색 순회를 사용하여 트리의 노드를 표시해야 하는 경우 클래스가 생성되며 여기에는 루트 노드 설정, 트리에 요소 추가, 특정 요소 검색, 'bfs' 수행( 너비 우선 탐색) 등이 있습니다. 이러한 메서드에 액세스하고 사용하기 위해 클래스의 인스턴스를 만들 수 있습니다.

아래는 동일한 데모입니다 -

class Tree_struct:
   def __init__(self, data=None):
      self.key = data
      self.children = []

   def set_root(self, data):
      self.key = data

   def add_node(self, node):
      self.children.append(node)

   def search_node(self, key):
      if self.key == key:
         return self
      for child in self.children:
         temp = child.search_node(key)
         if temp is not None:
            return temp
      return None

   def bfs_operation(self):
      queue = [self]
      while queue != []:
         popped = queue.pop(0)
         for child in popped.children:
            queue.append(child)
         print(popped.key, end=' ')

my_instance = None

print('Menu (assume no duplicate keys)')
print('add <data> at root')
print('add <data> below <data>')
print('bfs')
print('quit')

while True:
   my_input = input('What operation would you do ? ').split()

   operation = my_input[0].strip().lower()
   if operation == 'add':
      data = int(my_input[1])
      new_node = Tree_struct(data)
      suboperation = my_input[2].strip().lower()
      if suboperation == 'at':
         my_instance = new_node
      elif suboperation == 'below':
         position = my_input[3].strip().lower()
         key = int(position)
         ref_node = None
         if my_instance is not None:
            ref_node = my_instance.search_node(key)
         if ref_node is None:
            print('No such key')
            continue
         ref_node.add_node(new_node)

   elif operation == 'bfs':
      if my_instance is None:
         print('The tree is empty')
      else:
         print('Breadth First Search traversal is : ', end='')
         my_instance.bfs_operation()
         print()

   elif operation == 'quit':
      break

출력

Menu (assume no duplicate keys)
add <data> at root
add <data> below <data>
bfs
quit
What operation would you do ? add 6 at root
What operation would you do ? add 4 below 6
What operation would you do ? add 9 below 4
What operation would you do ? bfs
Breadth First Search traversal is : 6 4 9
What operation would you do ? quit

설명

  • 필수 속성을 가진 'Tree_struct' 클래스가 생성됩니다.

  • 빈 목록을 만드는 데 사용되는 '초기화' 기능이 있습니다.

  • 이진 트리의 루트 값을 설정하는 데 도움이 되는 'set_root' 메서드가 정의되어 있습니다.

  • 트리에 요소를 추가하는 데 도움이 되는 'add_node' 메서드가 있습니다.

  • 특정 요소를 검색하는 데 도움이 되는 'search_elem'이라는 메서드가 정의되어 있습니다.

  • 트리에서 너비 우선 탐색을 수행하는 데 도움이 되는 'bfs_operation'이라는 메서드가 정의되어 있습니다.

  • 인스턴스가 생성되어 '없음'으로 지정됩니다.

  • 수행해야 하는 작업에 대해 사용자 입력을 받습니다.

  • 사용자의 선택에 따라 작업이 수행됩니다.

  • 관련 출력이 콘솔에 표시됩니다.