まず、問題の要件を確認しましょう。与えられた二分木の各パス(ルートから葉までの経路)上のノードの値を足し合わせた合計値を求める必要があります。
解法としては、再帰を用いることが一般的です。以下にシンプルで簡単な再帰の解法とコード例を示します。
まず、再帰関数を定義します。関数は現在のノードと現在の合計値を引数に取ります。
def sumRootToLeaf(root, current_sum):
if root is None:
return 0
current_sum = current_sum * 2 + root.val
if root.left is None and root.right is None:
return current_sum
return sumRootToLeaf(root.left, current_sum) + sumRootToLeaf(root.right, current_sum)
この再帰関数は、与えられた二分木の各ノードを順番にたどりながら、現在の合計値を更新していきます。葉ノードに到達した場合は、現在の合計値を返します。
次に、与えられた二分木を作成し、再帰関数を呼び出す例を示します。
# 二分木の定義
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 二分木の作成
root = TreeNode(1)
root.left = TreeNode(0)
root.right = TreeNode(1)
root.left.left = TreeNode(0)
root.left.right = TreeNode(1)
root.right.left = TreeNode(0)
root.right.right = TreeNode(1)
# 再帰関数の呼び出し
result = sumRootToLeaf(root, 0)
# 結果の表示
print("ルートから葉までの合計値:", result)
このコードでは、与えられた二分木を作成し、sumRootToLeaf
関数にルートノードと初期の合計値0を渡しています。最終的な合計値はresult
として表示されます。
以上が、ルートから葉までの合計値を求めるLeetCodeの問題に対するシンプルで簡単な解法とコード例です。再帰を使うことで、効率的に解を求めることができます。ぜひ参考にしてみてください。