สมมติว่าเรามีต้นไม้ไบนารีสองทรี เราต้องตรวจสอบว่าต้นไม้ที่สองเป็นต้นไม้ย่อยของต้นไม้แรกหรือไม่
ดังนั้นหากอินพุตเป็นแบบ
แล้วผลลัพธ์จะเป็น True
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน Solve() สิ่งนี้จะหยั่งรากเป้าหมาย
-
ถ้ารูทเป็นโมฆะและเป้าหมายเป็นโมฆะด้วย ดังนั้น
-
คืนค่า True
-
-
หากรูทเป็นโมฆะหรือเป้าหมายเป็นโมฆะ
-
คืนค่าเท็จ
-
-
ถ้าค่ารูทเท่ากับค่าเป้าหมายแล้ว
-
คืนค่าการแก้ (ซ้ายของรูท ซ้ายของเป้าหมาย) และแก้ (ทางขวาของรูท ทางขวาของเป้าหมาย)
-
-
มิฉะนั้น
-
คืนค่าการแก้ (ด้านซ้ายของรูท เป้าหมาย) หรือแก้ (ทางขวาของรูท เป้าหมาย)
-
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, root, target): if root == None and target == None: return True if root == None or target == None: return False if root.val == target.val: return self.solve(root.left, target.left) and self.solve(root.right, target.right) else: return self.solve(root.left, target) or self.solve(root.right, target) ob = Solution() root1 = TreeNode(6) root1.left = TreeNode(4) root1.right = TreeNode(10) root1.left.left = TreeNode(3) root1.left.right = TreeNode(5) root2 = TreeNode(4) root2.left = TreeNode(3) root2.right = TreeNode(5) print(ob.solve(root1, root2))
อินพุต
root1 = TreeNode(6) root1.left = TreeNode(4) root1.right = TreeNode(10) root1.left.left = TreeNode(3) root1.left.right = TreeNode(5) root2 = TreeNode(4) root2.left = TreeNode(3) root2.right = TreeNode(5)
ผลลัพธ์
True