判斷二叉樹中是否存在等於目標的路徑

LeetCode: 112 路徑求和

 

給定一個二叉樹和一個目標和,判斷該樹中是否存在根節點到葉子節點的路徑,這條路徑上所有節點值相加等於目標和。
說明: 葉子節點是指沒有子節點的節點。
示例: 
給定如下二叉樹,以及目標和 sum = 22,
              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

返回 true, 因爲存在目標和爲 22 的根節點到葉子節點的路徑 5->4->11->2

思路: 遞歸法: 不是葉子-目標值減去此節點值,向左右子樹遞歸; 是葉子-減去葉子判斷是否相等

定義二叉樹:

# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

遞歸實現:

class Solution:
    # 遞歸:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if not root:    return False
        if not root.left and not root.right and sum-root.val==0:
            return True
        else:
            return self.hasPathSum(root.left,sum-root.val) or self.hasPathSum(root.right,sum-root.val)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章