Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมตรวจสอบลำดับของใบไม้ที่เหมือนกันของสองใบหรือไม่ใน python


สมมติว่าเรามีต้นไม้ไบนารีสองทรี เราต้องตรวจสอบลำดับของใบไม้จากซ้ายไปขวาในต้นไม้ทั้งสองต้นว่าเหมือนกันหรือไม่

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมตรวจสอบลำดับของใบไม้ที่เหมือนกันของสองใบหรือไม่ใน python

จากนั้นผลลัพธ์จะเป็น True เนื่องจากลำดับคือ [2, 6] สำหรับต้นไม้ทั้งสอง

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้:

  • c :=รายการใหม่
  • กำหนดฟังก์ชัน inorder() สิ่งนี้จะหยั่งรากและค
  • ถ้า c เป็นโมฆะ แล้ว
    • c :=รายการใหม่
  • ถ้ารูทไม่เป็นโมฆะ
    • inorder(ด้านซ้ายของ root, c)
    • ถ้าทางซ้ายของรูทเป็นโมฆะ และทางขวาของรูทเป็นโมฆะ ดังนั้น
      • ใส่ค่าของ root ที่ส่วนท้ายของ c
    • inorder(ทางขวาของรูท, c)
  • คืนค
  • จากวิธีหลัก ให้ทำดังนี้:
  • ถ้า inorder(root0) เหมือนกับ inorder(root1) แล้ว
    • คืนค่า True
  • มิฉะนั้น
    • คืนค่าเท็จ

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น:

ตัวอย่าง

class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right

class Solution:
   c = []

   def inorder(self, root, c=None):
      if c is None:
         c = []
      if root:
         self.inorder(root.left, c)
         if not root.left and not root.right:
            c.append(root.val)
            self.inorder(root.right, c)
      return c

   def solve(self, root0, root1):
      if self.inorder(root0) == self.inorder(root1):
         return True
      else:
         return False

ob = Solution()
root1 = TreeNode(1)
root1.right = TreeNode(3)
root1.right.left = TreeNode(2)
root1.right.right = TreeNode(6)

root2 = TreeNode(1)
root2.left = TreeNode(3)
root2.right = TreeNode(6)
root2.left.left = TreeNode(2)
print(ob.solve(root1, root2))

อินพุต

root1 = TreeNode(1)
root1.right = TreeNode(3)

root1.right.left = TreeNode(2)

root1.right.right = TreeNode(6) 

root2 = TreeNode(1)

root2.left = TreeNode(3)

root2.right = TreeNode(6)

root2.left.left = TreeNode(2)

ผลลัพธ์

True