สมมติว่าเรามีต้นไม้ไบนารี เราจะลบใบไม้ทั้งหมดที่มีค่าคู่ซ้ำแล้วซ้ำเล่า หลังจากลบทั้งหมดแล้ว หากมีเพียงรูทที่มีค่าคู่ ค่านั้นจะถูกลบด้วย
ดังนั้นหากอินพุตเป็นแบบ
แล้วผลลัพธ์ที่ได้จะเป็น
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
-
กำหนดฟังก์ชัน Solve() สิ่งนี้จะหยั่งราก
-
ถ้ารูทเป็นโมฆะ
-
คืนค่า null
-
-
ทางซ้ายของรูท :=แก้ (ทางซ้ายของรูท)
-
ทางขวาของรูท :=แก้ (ทางขวาของรูท)
-
ถ้ารูทเป็นใบไม้และข้อมูลของรูทเท่ากัน
-
คืนค่า null
-
-
คืนค่ารูท
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.data = data self.left = left self.right = right def inorder(root): if root: inorder(root.left) print(root.data, end = ', ') inorder(root.right) class Solution: def solve(self, root): if not root: return None root.left = self.solve(root.left) root.right = self.solve(root.right) if not root.left and not root.right and root.data % 2 == 0: return None return root ob = Solution() root = TreeNode(13) root.left = TreeNode(12) root.right = TreeNode(14) root.right.left = TreeNode(16) root.right.right = TreeNode(22) root.right.left.left = TreeNode(4) root.right.left.right = TreeNode(7) ob.solve(root) inorder(root)
อินพุต
root = TreeNode(13) root.left = TreeNode(12) root.right = TreeNode(14) root.right.left = TreeNode(16) root.right.right = TreeNode(22) root.right.left.left = TreeNode(4) root.right.left.right = TreeNode(7)
ผลลัพธ์
13, 16, 7, 14,