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

Chương trình tìm ra tổ tiên chung thấp nhất của cây nhị phân gồm các nút đã cho bằng Python

Giả sử, chúng ta được cung cấp một cây nhị phân và được yêu cầu tìm ra tổ tiên chung thấp nhất của tất cả các nút trong cây. Tổ tiên chung thấp nhất trong cây nhị phân là nút thấp nhất trong đó các nút x1, x2, x3, ...., xn là con cháu. Một nút cụ thể cũng có thể là con của chính nó. Chúng ta phải tìm nút và trả về nó như một đầu ra. Các đầu vào là nút gốc của cây và danh sách các nút mà chúng ta phải tìm ra tổ tiên của nó.

Vì vậy, nếu đầu vào giống như

Chương trình tìm ra tổ tiên chung thấp nhất của cây nhị phân gồm các nút đã cho bằng Python

và danh sách các nút mà chúng ta phải tìm tổ tiên là [6, 8]; thì đầu ra sẽ là 7.

Đầu ra là 7, vì nút thấp nhất trong đó các nút 6 và 8 là con cháu là 7.

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

  • Định nghĩa một hàm fn (). Điều này sẽ lấy nút

    • nếu nút tương tự như null, thì

      • nút trả lại

    • ngược lại khi nút được đặt trước trong các nút thì

      • nút trả lại

    • left:=fn (left of node),

    • right:=fn (bên phải của nút)

    • nếu trái và phải không rỗng thì

      • nút trả lại

    • nếu không,

      • nếu trái hoặc phải không rỗng thì

        • nút trả lại

  • node:=a new list

  • đối với mỗi lớp trong node_list, hãy thực hiện

    • chèn search_node (root, elem) vào cuối các nút

  • các nút:=một tập hợp mới từ các nút

  • trả về fn (gốc)

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

Ví dụ

import collections
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.data = data
      self.left = left
      self.right = right
def insert(temp,data):
   que = []
   que.append(temp)
   while (len(que)):
      temp = que[0]
      que.pop(0)
      if (not temp.left):
         if data is not None:
            temp.left = TreeNode(data)
         else:
            temp.left = TreeNode(0)
         break
      else:
         que.append(temp.left)
      if (not temp.right):
         if data is not None:
            temp.right = TreeNode(data)
         else:
            temp.right = TreeNode(0)
         break
      else:
         que.append(temp.right)
def make_tree(elements):
   Tree = TreeNode(elements[0])
   for element in elements[1:]:
      insert(Tree, element)
   return Tree
def search_node(root, element):
   if (root == None):
      return None
   if (root.data == element):
      return root
   res1 = search_node(root.left, element)
   if res1:
      return res1
   res2 = search_node(root.right, element)
   return res2
def print_tree(root):
   if root is not None:
      print_tree(root.left)
      print(root.data, end = ', ')
      print_tree(root.right)
def solve(root, node_list):
   nodes = []
   for elem in node_list:
      nodes.append(search_node(root, elem))
      nodes = set(nodes)
def fn(node):
   if not node:
      return node
   elif node in nodes:
      return node
      left, right = fn(node.left), fn(node.right)
      return node if left and right else left or right
   return fn(root)
root = make_tree([5, 3, 7, 2, 4, 6, 8])
print(solve(root, [6,8]).data)

Đầu vào

make_tree([5, 3, 7, 2, 4, 6, 8]), [6, 8]

Đầu ra

7