在 Python 中查詢同一層級葉子節點資料之和的乘積
假設我們有一棵二叉樹。我們需要執行以下操作:
對於每一層,如果該層存在葉子節點,則找到所有葉子節點的和。否則忽略。
找到所有這些和的乘積並返回。
因此,如果輸入如下所示:

則輸出將為 270。前兩層沒有葉子節點。第三層只有一個葉子節點 9。最後一層有四個葉子節點 2、12、5 和 11。所以結果是 9 * (2 + 12 + 5 + 11) = 270
為了解決這個問題,我們將遵循以下步驟:
如果根節點為空,則
返回 0
res := 1
que := 一個佇列
將根節點插入佇列的末尾
無限迴圈:
no_of_nodes := 佇列的大小
如果 no_of_nodes 等於 0,則
退出迴圈
sum_level := 0
found_leaf := False
當 no_of_nodes > 0 時,執行:
curr_node := 佇列的第一個元素
如果 curr_node 是葉子節點,則
found_leaf := True
sum_level := sum_level + curr_node.data
從佇列中刪除第一個元素
如果 curr_node.left 不為空,則
將 curr_node.left 插入佇列的末尾
如果 curr_node.right 不為空,則
將 curr_node.right 插入佇列的末尾
no_of_nodes := no_of_nodes - 1
如果 found_leaf 為真,則
res := res * sum_level
返回 res
示例
讓我們來看下面的實現,以便更好地理解:
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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP