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

삼항 트리에서 이중 연결 목록을 만드는 Python 프로그램

<시간/>

삼항 트리에서 이중 연결 목록을 생성해야 하는 경우 '노드' 클래스를 생성해야 합니다. 이 클래스에는 노드에 있는 데이터와 연결 목록의 다음 노드에 대한 액세스라는 두 가지 속성이 있습니다.

초기화 기능이 있는 또 다른 'linked_list' 클래스를 생성해야 하며, 노드의 헤드는 'None'으로 초기화됩니다.

이중 연결 목록에서 노드에는 포인터가 있습니다. 현재 노드는 다음 노드와 이전 노드에 대한 포인터를 갖습니다. 목록의 마지막 값은 다음 포인터에서 'NULL' 값을 갖습니다. 양방향으로 횡단할 수 있습니다.

주어진 이중 연결 목록을 삼항 트리로 변환하고 노드 값을 인쇄하기 위해 사용자가 여러 메서드를 정의합니다.

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

예시

class Node:
   def __init__(self, my_data):
      self.right = None
      self.data = my_data
      self.left = None
      self.mid = None
class ternary_tree_to_list:
   def __init__(self):
      self.root = None
      self.head = None
      self.tail = None
   def convert_ternary_tree_to_list(self, node_val):
      if node_val is None:
         return
         left = node_val.left;
         mid = node_val.mid;
         right = node_val.right;
      if (self.head == None) :
         self.head = self.tail = node_val
         node_val.middle = None
         self.head.left = None
         self.head.right = None
      else:
         self.tail.right = node_val
         node_val.left = self.tail
         node_val.mid = None
         self.tail = node_val
         self.tail.right = None
      self.convert_ternary_tree_to_list(left)
      self.convert_ternary_tree_to_list(mid)
      self.convert_ternary_tree_to_list(right)
def print_it(self):
   curr = self.head
   if (self.head == None):
      print("The list is empty")
      return
   print("The nodes are :")
   while curr != None:
      print(curr.data)
      curr = curr.right
my_instance = ternary_tree_to_list()
print("Elements are being added to the list")
my_instance.root = Node(10)
my_instance.root.left = Node(14)
my_instance.root.mid = Node(24)
my_instance.root.right = Node(17)
my_instance.root.left.left = Node(22)
my_instance.root.left.mid = Node(23)
my_instance.root.mid.left = Node(24)
my_instance.root.mid.mid = Node(28)
my_instance.root.mid.right = Node(30)
my_instance.root.right.left = Node(45)
my_instance.root.right.mid = Node(50)
my_instance.root.right.right = Node(80)
my_instance.convert_ternary_tree_to_list(my_instance.root)
my_instance.print_it()

출력

Elements are being added to the list
The nodes are :
10
14
22
23
24
24
28
30
17
45
50
80

설명

  • '노드' 클래스가 생성됩니다.
  • 필수 속성이 있는 다른 클래스가 생성됩니다.
  • 'convert_ternary_tree_to_list'라는 또 다른 메소드가 정의되어 있으며, 이는 주어진 이중 연결 목록을 삼항 트리로 변환하는 데 사용됩니다.
  • 순환 연결 목록의 노드를 표시하는 'print_it'이라는 또 다른 메서드가 정의되어 있습니다.
  • 'ternary_tree_to_list' 클래스의 객체가 생성되고, 이중 연결 리스트를 삼항 트리로 변환하기 위해 메소드가 호출됩니다.
  • 이중 연결 리스트의 루트, 헤드, 테일 노드를 None으로 하는 'init' 메소드가 정의되어 있습니다.
  • 'convert_ternary_tree_to_list' 메소드가 호출됩니다.
  • 이중 연결 목록을 반복하고 삼항 트리로 변환합니다.
  • 'print_it' 메소드를 사용하여 콘솔에 표시됩니다.