Leetcode 112 路徑總和

路徑總和

題目

給定一個(gè)二叉樹(shù)和一個(gè)目標(biāo)和,判斷該樹(shù)中是否存在根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑,這條路徑上所有節(jié)點(diǎn)值相加等于目標(biāo)和。

說(shuō)明: 葉子節(jié)點(diǎn)是指沒(méi)有子節(jié)點(diǎn)的節(jié)點(diǎn)。

示例:
給定如下二叉樹(shù),以及目標(biāo)和 sum = 22,

              5
             / \
            4   8
           /   / \
          11  13  4
         /  \      \
        7    2      1

返回 true, 因?yàn)榇嬖谀繕?biāo)和為 22 的根節(jié)點(diǎn)到葉子節(jié)點(diǎn)的路徑 5->4->11->2。

解答

  • 思路:

    • 遞歸進(jìn)行先序遍歷;
    • 如果遍歷到某個(gè)葉子節(jié)點(diǎn),發(fā)現(xiàn)路徑總和為目標(biāo)值,則返回True。
  • 代碼:

    def hasPathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype bool
    
        (knowledge)
    
        思路:
        1. 遞歸進(jìn)行先序遍歷;
        2. 如果遍歷到某個(gè)葉子節(jié)點(diǎn),發(fā)現(xiàn)路徑總和為目標(biāo)值,則返回True
        """
        if not root:
            return False
    
        # 找到葉子節(jié)點(diǎn)進(jìn)行判斷
        if not root.left and not root.right and root.val == sum:
            return True
    
        return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)
    

測(cè)試驗(yàn)證

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def hasPathSum(self, root, sum):
        """
        :type root: TreeNode
        :type sum: int
        :rtype bool

        (knowledge)

        思路:
        1. 遞歸進(jìn)行先序遍歷;
        2. 如果遍歷到某個(gè)葉子節(jié)點(diǎn),發(fā)現(xiàn)路徑總和為目標(biāo)值,則返回True
        """
        if not root:
            return False

        # 找到葉子節(jié)點(diǎn)進(jìn)行判斷
        if not root.left and not root.right and root.val == sum:
            return True

        return self.hasPathSum(root.left, sum - root.val) or self.hasPathSum(root.right, sum - root.val)


if __name__ == '__main__':
    solution = Solution()
    root = TreeNode(5)
    root.left = TreeNode(4)
    root.left.left = TreeNode(11)
    root.left.left.left = TreeNode(7)
    root.left.left.right = TreeNode(2)

    root.right = TreeNode(8)
    root.right.left = TreeNode(13)
    root.right.right = TreeNode(4)
    root.right.right.right = TreeNode(1)
    print(solution.hasPathSum(root, 22), "= True")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容