Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรมหาผลรวมของตัวเลขทั้งหมดที่เกิดจากเส้นทางของไบนารีทรีใน python


สมมติว่าเรามีต้นไม้ไบนารีที่แต่ละโหนดมีตัวเลขหลักเดียวตั้งแต่ 0 ถึง 9 ตอนนี้แต่ละเส้นทางจากรากถึงใบไม้จะแสดงตัวเลขที่มีตัวเลขตามลำดับ เราต้องหาผลรวมของตัวเลขที่แสดงโดยเส้นทางทั้งหมดในต้นไม้

ดังนั้นหากอินพุตเป็นแบบ

โปรแกรมหาผลรวมของตัวเลขทั้งหมดที่เกิดจากเส้นทางของไบนารีทรีใน python

จากนั้นผลลัพธ์จะเป็น 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