สมมุติว่าเรามี Binary Tree เราต้องดำเนินการดังต่อไปนี้ -
-
สำหรับแต่ละระดับ หาผลรวมของใบทั้งหมดหากมีใบในระดับนี้ มิฉะนั้นจะมองข้ามไป
-
หาผลคูณของผลรวมทั้งหมดแล้วส่งคืน
ดังนั้นหากอินพุตเป็นแบบ
จากนั้นผลลัพธ์จะเป็น 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