สมมติว่าเรามีต้นไม้ไบนารีที่แต่ละโหนดมีตัวเลขหลักเดียวตั้งแต่ 0 ถึง 9 ตอนนี้แต่ละเส้นทางจากรากถึงใบไม้จะแสดงตัวเลขที่มีตัวเลขตามลำดับ เราต้องหาผลรวมของตัวเลขที่แสดงโดยเส้นทางทั้งหมดในต้นไม้
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นผลลัพธ์จะเป็น 680 เป็น 46 (4 → 6), 432 (4 → 3 → 2), 435 (4 → 3 → 5) และผลรวมคือ 913
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
- กำหนดฟังก์ชัน Solve() สิ่งนี้จะทำการรูท string:=สตริงว่าง
- ถ้า root และไม่ใช่ root.left และไม่ใช่ root.right ไม่เป็นศูนย์ แล้ว
- คืนค่า int(สตริง + str(ค่ารูท))
- รวม :=0
- ถ้ารูทที่เหลือไม่เป็นโมฆะ
- ผลรวม :=ผลรวม + ค่าตัวเลขของการแก้ปัญหา (ด้านซ้ายของรูท, ค่าที่เชื่อมสตริงของรูท)
- หากสิทธิ์ของรูทไม่เป็นโมฆะ
- ผลรวม :=ผลรวม + ค่าตัวเลขของการแก้ปัญหา (ด้านขวาของรูท, ค่าที่เชื่อมสตริงของรูท)
- ผลตอบแทนรวม
ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -
ตัวอย่าง
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, string=""): if root and not root.left and not root.right: return int(string + str(root.val)) total = 0 if root.left: total += int(self.solve(root.left, string + str(root.val))) if root.right: total += int(self.solve(root.right, string + str(root.val))) return total ob = Solution() root = TreeNode(4) root.left = TreeNode(6) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(5) print(ob.solve(root))
อินพุต
root = TreeNode(4) root.left = TreeNode(6) root.right = TreeNode(3) root.right.left = TreeNode(2) root.right.right = TreeNode(5)
ผลลัพธ์
913