ルートから葉までの合計値を求める - LeetCodeの解法


まず、問題の要件を確認しましょう。与えられた二分木の各パス(ルートから葉までの経路)上のノードの値を足し合わせた合計値を求める必要があります。

解法としては、再帰を用いることが一般的です。以下にシンプルで簡単な再帰の解法とコード例を示します。

まず、再帰関数を定義します。関数は現在のノードと現在の合計値を引数に取ります。

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の問題に対するシンプルで簡単な解法とコード例です。再帰を使うことで、効率的に解を求めることができます。ぜひ参考にしてみてください。