Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Chương trình kiểm tra hai cây nhị phân có hoàn toàn giống nhau về cấu trúc và giá trị trong Python

Giả sử chúng ta có hai cây nhị phân, chúng ta phải kiểm tra xem chúng có hoàn toàn giống nhau về cấu trúc và giá trị hay không. Chúng ta có thể gọi chúng là cây song sinh (twin trees).

Ví dụ, nếu đầu vào như hình:

Chương trình kiểm tra hai cây nhị phân có hoàn toàn giống nhau về cấu trúc và giá trị trong Python

thì đầu ra sẽ là True cho cặp đầu tiên, False cho cặp thứ hai và ba vì giá trị và cấu trúc khác nhau tương ứng.

Để giải quyết, chúng ta thực hiện các bước sau:

  • Định nghĩa phương thức solve(), nhận hai root
  • nếu root0 null và root1 null, trả về True
  • nếu root0 null hoặc root1 null, trả về False
  • nếu giá trị root0 khác giá trị root1, trả về False
  • trả về True khi solve(left của root0, left của root1) VÀ solve(right của root0, right của root1) đều True, ngược lại False

Ví dụ

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

class Solution:
    def solve(self, root0, root1):
        if not root0 and not root1:
            return True
        if not root0 or not root1:
            return False
        if root0.val != root1.val:
            return False
        return self.solve(root0.left, root1.left) and self.solve(root0.right, root1.right)

ob = Solution()
root1 = TreeNode(10)
root1.left = TreeNode(5)
root1.right = TreeNode(15)
root1.left.left = TreeNode(3)
root1.left.right = TreeNode(8)
root2 = TreeNode(10)
root2.left = TreeNode(5)
root2.right = TreeNode(15)
root2.left.left = TreeNode(3)
root2.left.right = TreeNode(8)
print(ob.solve(root1, root2))

Input

root1 = TreeNode(10)
root1.left = TreeNode(5)
root1.right = TreeNode(15)
root1.left.left = TreeNode(3)
root1.left.right = TreeNode(8)
root2 = TreeNode(10)
root2.left = TreeNode(5)
root2.right = TreeNode(15)
root2.left.left = TreeNode(3)
root2.left.right = TreeNode(8)

Output

True