劍指offer【34】:二叉樹和爲某一值的路徑

題目:

思路+代碼:

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
        # 思路:
        # 求和這種,用減法思想來做
        # 遞歸:
        #   1.遞歸結束:
        #   2.當前層遞歸操作:當前層,tar -= root.val, 並且判斷如果tar==0並且是葉子節點,則說明序列正確,加入res; 然後分別遞歸左子樹和右子樹;本質                上是先序遍歷操作
        #   3.返回值:不需要返回值

        res, path = [], []  
        def recur(root, tar):
            if not root:
                return 
            path.append(root.val)
            tar -= root.val
            if tar == 0 and not root.left and not root.right:
                res.append(list(path)) # 直接添加path,對象不變,則後面執行pop操作後,path變化;list(path)則建立新對象
            recur(root.left, tar)
            recur(root.right, tar)
            path.pop()

        recur(root, sum)
        return res

 

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