112.経路合計(Python)

1098 ワード

タイトル
難易度:★☆☆☆タイプ:二叉樹
ツリーとターゲット和を指定し、ツリーにルートノードからリーフノードへのパスが存在するかどうかを判断します.このパスのすべてのノード値がターゲット和に加算されます.
説明:リーフノードとは、サブノードがないノードを指します.
例:
次のような二叉木とターゲットとsum=22が与えられ、
          5
         / \
        4   8
       /   / \
      11  13  4
     /  \      \
    7    2      1

ターゲットと22のルートノードからリーフノードへのパス5->4->11->2があるため、trueを返します.
に答える
再帰的に実現できます.
  • ルートノードが空のツリーを入力すると、パスは必ず存在せず、Falseに戻ります.
  • 入力ノードの左右のサブツリーが空である場合、入力ノードの葉ノードは、現在のノードの値と目標値が等しいことを示す.
  • 入力ノードの左右のサブツリーが1つ以上空でない場合、その左右のサブツリーに存在経路と目標値と現在のノードとの差が要求される.
  • class Solution:
        def hasPathSum(self, root, sum):
            if not root:                            #       
                return False                        #        
            if not root.left and not root.right:    #         
                return sum == root.val              #              
            #             ,                           
            return self.hasPathSum(root.left, sum-root.val) or self.hasPathSum(root.right, sum-root.val)
    

    質問やアドバイスがあれば、コメントエリアへようこそ~