Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình Python để chuyển đổi một cây nhị phân nhất định thành danh sách liên kết kép

Khi cần chuyển đổi một cây nhị phân nhất định thành một danh sách được liên kết kép, một lớp ‘Node’ cần được tạo. Trong lớp này, có hai thuộc tính, dữ liệu có trong nút và quyền truy cập vào nút tiếp theo của danh sách được liên kết.

Một lớp ‘linked_list’ khác cần được tạo sẽ có chức năng khởi tạo và phần đầu của nút sẽ được khởi tạo thành ‘Không có’.

Trong một danh sách được liên kết kép, các nút có các con trỏ. Nút hiện tại sẽ có một con trỏ đến nút tiếp theo cũng như nút trước đó. Giá trị cuối cùng trong danh sách sẽ có giá trị ‘NULL’ trong con trỏ tiếp theo. Nó có thể được đi ngang theo cả hai hướng.

Cây nhị phân là một cấu trúc dữ liệu phi tuyến tính, chứa một nút gốc và mọi nút ngoại trừ gốc có thể có một nút cha. Một nút cây nhị phân có thể có ít nhất hai nút con.

Người dùng xác định nhiều phương thức để chuyển đổi một cây nhị phân nhất định thành một danh sách được liên kết kép và in các giá trị nút.

Dưới đây là một minh chứng cho điều tương tự -

Ví dụ

Nút
class Node:
   def __init__(self, my_data):
      self.right = None
      self.data = my_data
      self.left = None
class binary_tree_to_list:
   def __init__(self):
      self.root = None
      self.head = None
      self.tail = None
   def convert_tree_to_list(self, node_val):
      if node_val is None:
         return
      self.convert_tree_to_list(node_val.left)
      if (self.head == None) :
         self.head = self.tail = node_val
      else:
         self.tail.right = node_val
         node_val.left = self.tail
         self.tail = node_val
      self.convert_tree_to_list(node_val.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 = binary_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.right = Node(17)
my_instance.root.left.left = Node(22)
my_instance.root.left.right = Node(29)
my_instance.root.right.left = Node(45)
my_instance.root.right.right = Node(80)
my_instance.convert_tree_to_list(my_instance.root)
my_instance.print_it()

Đầu ra

Elements are being added to the list
The nodes are :
22
14
29
10
45
17
80

Giải thích

  • Lớp 'Node' đã được tạo.
  • Một lớp khác với các thuộc tính bắt buộc được tạo.
  • Một phương thức khác có tên 'convert_tree_to_list' được xác định, được sử dụng để chuyển đổi cây nhị phân đã cho thành một danh sách được liên kết kép.
  • Một phương thức khác có tên là 'print_it' được xác định, phương thức này sẽ hiển thị các nút của danh sách liên kết vòng tròn.
  • Một đối tượng của lớp ‘binary_tree_to_list‘ được tạo và các phương thức được gọi trên nó để chuyển đổi cây thành danh sách được liên kết kép.
  • Một phương thức 'init' được xác định, rằng các nút gốc, đầu và cuối của danh sách được liên kết kép thành Không.
  • Phương thức 'convert_tree_to_list' được gọi.
  • Nó lặp lại qua cây nhị phân và chuyển nó thành một danh sách được liên kết kép.
  • Điều này được hiển thị trên bảng điều khiển bằng phương thức "print_it".