在 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

更新於:2020年8月19日

73 次瀏覽

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.