สมมติว่าเรามีไบนารีทรี เราต้องหารายการของตัวเลขสองตัว โดยที่หมายเลขแรกคือการนับใบไม้ในต้นไม้ และหมายเลขที่สองคือการนับโหนดที่ไม่ใช่ใบไม้
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นผลลัพธ์จะเป็น (3, 2) เนื่องจากมี 3 ลีฟและ 2 โหนดที่ไม่ใช่ลีฟ
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- ถ้า n เป็นโมฆะ แล้ว
- ส่งคืน (0, 0)
- ถ้าด้านซ้ายของ n เป็นค่าว่าง และด้านขวาของ n เป็นค่าว่าง ดังนั้น
- ผลตอบแทน (1, 0)
- ซ้าย :=แก้ (ซ้ายของ n)
- ขวา :=แก้(ทางขวาของ n)
- กลับ (ซ้าย[0] + ขวา[0], 1 + ซ้าย[1] + ขวา[1])
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
class TreeNode: def __init__(self, data, left = None, right = None): self.val = data self.left = left self.right = right class Solution: def solve(self, n): if not n: return 0, 0 if not n.left and not n.right: return 1, 0 left, right = self.solve(n.left), self.solve(n.right) return left[0] + right[0], 1 + left[1] + right[1] ob = Solution() root = TreeNode(6) root.left = TreeNode(2) root.right = TreeNode(6) root.right.left = TreeNode(10) root.right.right = TreeNode(2) print(ob.solve(root))
อินพุต
root = TreeNode(6) root.left = TreeNode(2) root.right = TreeNode(6) root.right.left = TreeNode(10) root.right.right = TreeNode(2)
ผลลัพธ์
(3, 2)