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

Pythonのバイナリツリーで2つのノード間のパスの最大合計を見つけるプログラム


二分木があるとしましょう。任意の2つのノード間の任意のパスの最大合計を見つける必要があります。

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

Pythonのバイナリツリーで2つのノード間のパスの最大合計を見つけるプログラム

ノードが[12,13,14,16,7]であるため、出力は62になります。

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

  • 関数utils()を定義します。これが定着します

  • ルートがnullの場合、

    • 0を返す

  • l:=utils(ルートの左側)

  • r:=utils(ルートの権利)

  • max_single:=最大値(lとrの最大値)+ルートの値)とルートの値

  • max_top:=max_singleの最大値とl+r+ルートの値

  • res:=resとmax_topの最大値

  • max_singleを返す

  • メインの方法から、次のようにします-

  • ルートがnullの場合、

    • 0を返す

  • res:=無限大

  • utils(root)

  • 解像度を返す

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

class TreeNode:
   def __init__(self, value):
      self.val = value
      self.left = None
      self.right = None
class Solution:
   def solve(self, root):
      if root is None:
         return 0
      self.res = float("-inf")
      self.utils(root)
      return self.res
   def utils(self, root):
      if root is None:
         return 0
      l = self.utils(root.left)
      r = self.utils(root.right)
      max_single = max(max(l, r) + root.val, root.val)
      max_top = max(max_single, l + r + root.val)
      self.res = max(self.res, max_top)
      return max_single
ob = Solution()
root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)
print(ob.solve(root))

入力

root = TreeNode(13)
root.left = TreeNode(12)
root.right = TreeNode(14)
root.right.left = TreeNode(16)
root.right.right = TreeNode(22)
root.right.left.left = TreeNode(4)
root.right.left.right = TreeNode(7)

出力

62

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

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

  2. Pythonで特定の二分木で最大の完全なサブツリーを見つける

    特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま