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

ค้นหาผลรวมของข้อมูลใบไม้ในระดับเดียวกันใน Python


สมมุติว่าเรามี Binary Tree เราต้องดำเนินการดังต่อไปนี้ -

  • สำหรับแต่ละระดับ หาผลรวมของใบทั้งหมดหากมีใบในระดับนี้ มิฉะนั้นจะมองข้ามไป

  • หาผลคูณของผลรวมทั้งหมดแล้วส่งคืน

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

ค้นหาผลรวมของข้อมูลใบไม้ในระดับเดียวกันใน Python

จากนั้นผลลัพธ์จะเป็น 270 สองระดับแรกไม่มีใบไม้ ระดับที่สามมีใบเดี่ยว 9 ระดับสุดท้ายมีสี่ใบ 2, 12, 5 และ 11 ดังนั้นผลลัพธ์คือ 9 * (2 + 12 + 5 + 11) =270

เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -

  • ถ้ารูทเป็นโมฆะ

    • คืนค่า 0

  • res :=1

  • que :=คิว

  • แทรก root ที่ส่วนท้ายของ que

  • ทำอย่างไม่มีที่สิ้นสุด -

    • no_of_nodes :=ขนาดของคิว

    • ถ้า no_of_nodes เหมือนกับ 0 แล้ว

      • ออกจากวง

    • sum_level :=0

    • found_leaf :=เป็นเท็จ

    • ในขณะที่ no_of_nodes> 0 ทำ

      • curr_node :=องค์ประกอบแรกของ que

      • ถ้า curr_node เป็น leaf แล้ว

        • found_leaf :=จริง

        • sum_level :=sum_level + curr_node.data

      • ลบองค์ประกอบแรกออกจาก que

      • ถ้า curr_node.left ไม่เป็นโมฆะ

        • ใส่ curr_node.left ต่อท้าย que

      • ถ้า curr_node.right ไม่เป็นโมฆะ

        • ใส่ curr_node.right ต่อท้าย que

      • no_of_nodes :=no_of_nodes - 1

    • ถ้า found_leaf เป็นจริง

      • res :=res * sum_level

  • ผลตอบแทน

ตัวอย่าง

ให้เราดูการใช้งานต่อไปนี้เพื่อความเข้าใจที่ดีขึ้น -

class TreeNode:
   def __init__(self, data):
      self.data = data
      self.left = self.right = None
def isLeaf(root) :
   return (not root.left and not root.right)
def find_res(root) :
   if (not root) :
      return 0
   res = 1
   que = []
   que.append(root)
   while (True):
      no_of_nodes = len(que)
   if (no_of_nodes == 0) :
      break
   sum_level = 0
   found_leaf = False
   while (no_of_nodes > 0) :
      curr_node = que[0]
      if (isLeaf(curr_node)) :
         found_leaf = True
         sum_level += curr_node.data
         que.pop(0)
         if (curr_node.left != None) :
            que.append(curr_node.left)
         if (curr_node.right != None) :
            que.append(curr_node.right)
         no_of_nodes -=1
      if (found_leaf) :
         res *= sum_level
   return res
root = TreeNode(8)
root.left = TreeNode(8)
root.right = TreeNode(6)
root.left.right = TreeNode(7)
root.left.left = TreeNode(9)
root.left.right.left = TreeNode(2)
root.left.right.right = TreeNode(12)
root.right.right = TreeNode(10)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(11)
print(find_res(root))

อินพุต

root = TreeNode(8)
root.left = TreeNode(8)
root.right = TreeNode(6)
root.left.right = TreeNode(7)
root.left.left = TreeNode(9)
root.left.right.left = TreeNode(2)
root.left.right.right = TreeNode(12)
root.right.right = TreeNode(10)
root.right.right.left = TreeNode(5)
root.right.right.right = TreeNode(11)

ผลลัพธ์

270