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

Pythonで合計がkであるパスの数をカウントするプログラム


二分木と別の値kがあるとすると、合計がkになるサブ子パスへの一意のノードの数を見つける必要があります。

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

Pythonで合計がkであるパスの数をカウントするプログラム

k =5の場合、パスは[2、3]と[1、4]

であるため、出力は2になります。

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

  • count:=マップは最初にキー0の値1を保持します
  • ans:=0、プレフィックス:=0
  • 関数dfs()を定義します。これはノードを取ります
  • ノードがnullでない場合、
    • プレフィックス:=プレフィックス+ノードの値
    • ans:=ans +(count [prefix --target]、これが利用できない場合は0になります)
    • count [prefix]:=count [prefix] + 1
    • dfs(ノードの左側)
    • dfs(ノードの右側)
    • count [prefix]:=count [prefix]-1
    • prefix:=prefix-ノードの値
  • メインの方法から、次の手順を実行します
  • dfs(root)
  • 回答を返す

理解を深めるために、次の実装を見てみましょう-

from collections import Counter
class TreeNode:
   def __init__(self, data, left = None, right = None):
      self.val = data
      self.left = left
      self.right = right

class Solution:
   def solve(self, root, target):
      count = Counter([0])
      ans = prefix = 0

      def dfs(node):
         nonlocal ans, prefix
         if node:
            prefix += node.val
            ans += count[prefix - target]
            count[prefix] += 1
            dfs(node.left)
            dfs(node.right)

            count[prefix] -= 1
            prefix -= node.val
      dfs(root)
      return ans
     
ob = Solution()
root = TreeNode(3)
root.left = TreeNode(2)
root.right = TreeNode(4)
root.right.left = TreeNode(1)
root.right.left.right = TreeNode(2)
k = 5
print(ob.solve(root, k))

入力

root = TreeNode(3)
root.left = TreeNode(2)
root.right = TreeNode(4)
root.right.left = TreeNode(1)
root.right.left.right = TreeNode(2)
5

出力

2

  1. Pythonで特定のエッジを含む一意のパスの数をカウントするプログラム

    (u、v)の形式のエッジのリストがあり、これらがツリーを表しているとします。エッジごとに、入力で指定されたのと同じ順序で、そのエッジを含む一意のパスの総数を見つける必要があります。 したがって、入力がエッジのような場合=[[0、1]、[0、2]、[1、3]、[1、4]] その場合、出力は[6、4、4、4]になります。 これを解決するには、次の手順に従います- adj:=指定されたエッジからの隣接リスト count:=空のマップ 関数dfs()を定義します。これにはx、親が必要です count [x]:=1 adj [x]のnbごとに、実行 n

  2. Pythonプログラムで数の偶数因子の合計を見つける

    この記事では、以下に示す問題ステートメントの解決策について学習します。 問題の説明 −数値が与えられているので、数値のすべての偶数因子の合計を表示する必要があります。 アプローチ 数値が奇数かどうかを確認し、偶数の因子がないため、0を返します。 数が偶数の場合、計算を実行します。 20を除く他のすべての項は、偶数の因数の合計を生成するために乗算されます。 偶数因子のすべての奇数を削除するために、1である20を無視します。このステップの後、偶数因子のみを取得しました。 2は私たちが利用できる唯一の素数であることに注意してください。 次に、以下の実装を見てみましょう- 例 # math