Pythonでのパスの合計
これを解決するために、次の手順に従います。
-
ルートがnullの場合は、Falseを返します
-
左右のサブツリーが空の場合、sum – root.val =0の場合はtrueを返し、それ以外の場合はfalseを返します
-
戻り値solve(root.left、sum – root.val)またはsolve(root.right、sum – root.val)
理解を深めるために、次の実装を見てみましょう-
例
# Definition for a binary tree node. class TreeNode(object): def __init__(self, x): self.data = x self.left = None self.right = None def insert(temp,data): que = [] que.append(temp) while (len(que)): temp = que[0] que.pop(0) if (not temp.left): if data is not None: temp.left = TreeNode(data) else: temp.left = TreeNode(0) break else: que.append(temp.left) if (not temp.right): if data is not None: temp.right = TreeNode(data) else: temp.right = TreeNode(0) break else: que.append(temp.right) def make_tree(elements): Tree = TreeNode(elements[0]) for element in elements[1:]: insert(Tree, element) return Tree class Solution(object): def hasPathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: bool """ if not root : return False if not root.left and not root.right and root.data is not None: return sum - root.data == 0 if root.data is not None: return self.hasPathSum(root.left, sum-root.data) or self.hasPathSum(root.right, sum-root.data) tree1 = make_tree([0,-3,9,-10,None,5]) ob1 = Solution() print(ob1.hasPathSum(tree1, 14))
入力
tree1 = make_tree([0,-3,9,-10,None,5])
出力
True
-
Pythonでバイナリツリーの任意のパスの最大合計を見つけるプログラム
二分木があるとすると、ルートノードからリーフノードに向かうパスの最大の合計を見つける必要があります。 したがって、入力が次のような場合 その場合、出力はルートからのように29になります。パス5-<9- <7- <8をたどると、加算後は29になります。 これを解決するために、次の手順に従います- 関数walk()を定義します。これはノードを取ります、s ノードがnullの場合、 max_sum:=max_sumとsの最大値 戻る s:=s+ノードのデータ ウォーク(ノードの左側、s) ウォーク(ノードの右側、s) 主な方法から次の
-
Pythonでの二分木最大パス合計
空でない二分木が1つあるとします。パスの合計を見つける必要があります。したがって、ここでのパスとは、開始ノードから親子接続が存在するノードまでのノードのシーケンスです。パスには少なくとも1つのノードが含まれている必要があり、ルートノードを通過する必要はありません。したがって、入力ツリーが-の場合 ここで、出力は32になります。 これを解決するには、次の手順に従います- solve()と呼ばれる1つのメソッドを定義します。これはノードを取ります nodeがnullまたはnodeの値が0の場合、0を返します left:=最大0およびsolve(ノードの左側) ri