Pythonのバイナリツリーで2つのノード間のパスの最大合計を見つけるプログラム
二分木があるとしましょう。任意の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
-
Pythonで二分木の最大幅を見つけるプログラム
二分木があるとすると、ツリー内の任意のレベルの最大幅を見つける必要があります。ここで、レベルの幅は、左端のノードと右端のノードの間に保持できるノードの数です。 したがって、入力がのような場合 その場合、出力は2になります これを解決するために、次の手順に従います- マップdを作成し、最小値と最大値を保持するには、最小値は最初は無限大で、最大値は0です 関数dfs()を定義します。これはルートを取ります、pos:=0、depth:=0 ルートがnullの場合、戻り値はありません d [depth、0] =d [depth、0]とposの最小値 d [d
-
Pythonで特定の二分木で最大の完全なサブツリーを見つける
特定の二分木があるとします。与えられた二分木で最大のパーフェクトサブツリーのサイズを見つける必要があります。私たちが知っているように、完全な二分木は、すべての内部ノードに2つの子があり、すべての葉が同じレベルにある二分木です。 したがって、入力が次のような場合 その場合、出力は3になり、サブツリーは これを解決するには、次の手順に従います- RetTypeと呼ばれる1つのブロックを定義します。これは、isPerfect、height、rootTreeを保持し、最初はすべて0です get_prefect_subtree()という関数を定義します。これはルートを取りま