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

Chương trình chuyển đổi danh sách liên kết sang cây nhị phân zig-zag bằng Python

Giả sử chúng ta có một danh sách được liên kết đơn lẻ, chúng ta phải chuyển đổi nó thành một đường dẫn cây nhị phân bằng cách sử dụng các quy tắc sau -

  • Phần đầu của danh sách được liên kết là phần gốc.
  • Mỗi nút tiếp theo là nút con bên trái của nút cha khi giá trị của nó nhỏ hơn, nếu không nó sẽ là nút con bên phải.

Vì vậy, nếu đầu vào là [2,1,3,4,0,5], thì đầu ra sẽ là

Chương trình chuyển đổi danh sách liên kết sang cây nhị phân zig-zag bằng Python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm giải quyết (). Điều này sẽ lấy nút
  • nếu nút là null, thì
    • trả về null
  • root:=tạo một nút cây có giá trị giống với giá trị của nút
  • nếu nút tiếp theo không phải là null, thì
    • if value of next of node
    • left of root:=giải quyết (tiếp theo của nút)
  • nếu không,
    • bên phải của gốc:=giải quyết (tiếp theo của nút)
  • trả về thư mục gốc
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    class ListNode:
       def __init__(self, data, next = None):
          self.val = data
          self.next = next
    def make_list(elements):
       head = ListNode(elements[0])
       for element in elements[1:]:
          ptr = head
          while ptr.next:
             ptr = ptr.next
          ptr.next = ListNode(element)
       return head
    class TreeNode:
       def __init__(self, data, left = None, right = None):
          self.data = data
          self.left = left
          self.right = right
    def print_tree(root):
       if root is not None: print_tree(root.left)
          print(root.data, end = ', ') print_tree(root.right)
    class Solution:
       def solve(self, node):
          if not node:
             return None
             root = TreeNode(node.val)
          if node.next:
             if node.next.val < node.val:
                root.left = self.solve(node.next)
             else:
                root.right = self.solve(node.next)
          return root
    ob = Solution()
    L = make_list([2,1,3,4,0,5])
    print_tree(ob.solve(L))

    Đầu vào

    [2,1,3,4,0,5]

    Đầu ra

    1, 3, 0, 5, 4, 2,