Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで同じレベルの葉のデータの合計の乗算を見つける


二分木があるとします。次の操作を実行する必要があります-

  • レベルごとに、このレベルに葉がある場合は、すべての葉の合計を求めます。それ以外の場合は無視してください。

  • すべての合計の乗算を見つけて返します。

したがって、入力が次のような場合

Pythonで同じレベルの葉のデータの合計の乗算を見つける

その場合、出力は270になります。最初の2つのレベルにはリーフがありません。 3番目のレベルには単一の葉9があります。最後のレベルには4つの葉2、12、5、および11があります。したがって、結果は9 *(2 + 12 + 5 + 11)=270

これを解決するには、次の手順に従います-

  • ルートがnullの場合、

    • 0を返す

  • res:=1

  • que:=キュー

  • queの最後にルートを挿入します

  • 無限に行う-

    • no_of_nodes:=queのサイズ

    • no_of_nodesが0と同じ場合、

      • ループから出てきます

    • sum_level:=0

    • found_leaf:=False

    • no_of_nodes> 0の場合、実行

      • curr_node:=queの最初の要素

      • curr_nodeがleafの場合、

        • found_leaf:=True

        • sum_level:=sum_level + curr_node.data

      • queから最初の要素を削除する

      • curr_node.leftがnullでない場合、

        • queの最後にcurr_node.leftを挿入します

      • curr_node.rightがnullでない場合、

        • queの最後にcurr_node.rightを挿入します

      • no_of_nodes:=no_of_nodes-1

    • found_leafがtrueの場合、

      • 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

  1. Pythonで同じレベルの葉のデータの合計の乗算を見つける

    二分木があるとします。次の操作を実行する必要があります- レベルごとに、このレベルに葉がある場合は、すべての葉の合計を求めます。それ以外の場合は無視してください。 すべての合計の乗算を見つけて返します。 したがって、入力が次のような場合 その場合、出力は270になります。最初の2つのレベルにはリーフがありません。 3番目のレベルには単一の葉9があります。最後のレベルには4つの葉2、12、5、および11があります。したがって、結果は9 *(2 + 12 + 5 + 11)=270 これを解決するには、次の手順に従います- ルートがnullの場合、 0を返

  2. nで割った配列乗算のリマインダーを見つけるためのPythonプログラム

    この記事では、以下に示す問題ステートメントの解決策について学習します- 問題の説明 複数の数値と数値入力nが与えられた場合、除算可能なすべての数値にnを掛けた後、余りを出力する必要があります。 アプローチ まず、arr [i]%nのように余りを計算します。次に、この余りに現在の結果を掛けます。 乗算後、オーバーフローを避けるために同じ余りを取ります。これは、モジュラー演算の分配法則に準拠しています。 ( a * b) % c = ( ( a % c ) * ( b % c ) ) % c 例 def findremainder(arr, lens, n):   &n