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

Pythonの二分木のパスによって形成されたすべての数の合計を見つけるプログラム


各ノードに0から9までの1桁の数字が含まれている二分木があるとします。ここで、ルートからリーフまでの各パスは、数字が順番に並んだ数字を表します。ツリー内のすべてのパスで表される数値の合計を見つける必要があります。

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

Pythonの二分木のパスによって形成されたすべての数の合計を見つけるプログラム

その場合、出力は680(46(4→6)、432(4→3→2)、435(4→3→5))になり、それらの合計は913になります。

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

  • 関数solve()を定義します。これはルートを取ります、string:=空白の文字列
  • root.leftではなくroot.rightではなくrootがゼロ以外の場合、
    • return int(string + str(value of root))
  • 合計:=0
  • ルートの左側がnullでない場合、
    • total:=total +solveの数値(ルートの左側、ルートの文字列連結値)
  • ルートの権利がnullでない場合、
    • total:=total +solveの数値(ルートの右、ルートの文字列連結値)
  • 合計を返す

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

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, string=""):
      if root and not root.left and not root.right:
         return int(string + str(root.val))

      total = 0
      if root.left:
         total += int(self.solve(root.left, string + str(root.val)))

      if root.right:
         total += int(self.solve(root.right, string + str(root.val)))

      return total

ob = Solution()
root = TreeNode(4)
root.left = TreeNode(6)
root.right = TreeNode(3)
root.right.left = TreeNode(2)
root.right.right = TreeNode(5)
print(ob.solve(root))

入力

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

出力

913

  1. Pythonで二分木の最大幅を見つけるプログラム

    二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d

  2. Pythonでの二分木最大パス合計

    空でない二分木が1つあるとします。パスの合計を見つける必要があります。したがって、ここでのパスとは、開始ノードから親子接続が存在するノードまでのノードのシーケンスです。パスには少なくとも1つのノードが含まれている必要があり、ルートノードを通過する必要はありません。したがって、入力ツリーが-の場合 ここで、出力は32になります。 これを解決するには、次の手順に従います- solve()と呼ばれる1つのメソッドを定義します。これはノードを取ります nodeがnullまたはnodeの値が0の場合、0を返します left:=最大0およびsolve(ノードの左側) ri