面試題34. 二叉樹中和爲某一值的路徑

輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
思路:
dfs(root)裏面套dfs(root.left),dfs(root.right)就是dfs遞歸出口是空節點。ans和path分別用來存儲滿足條件的path和path的過程。
最好用PyCharm debug走一下過程即可。

給定如下二叉樹,以及目標和 sum = 225
             / \
            4   8
           /   / \
          11  13  4
         /  \    / \
        7    2  5   1
返回:
[
   [5,4,11,2],
   [5,8,4,5]
]
# Definition for a binary tree node.
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def pathSum(self, root: TreeNode, sum):
        ans, path = [], []

        def dfs(root, sum):
            if not root: return #遞歸出口
            path.append(root.val)
            sum -= root.val
            #如果root是葉子節點,且root.val等於sum,把路勁加入
            if not root.left and not root.right and not sum:
                ans.append(path[:])
            dfs(root.left, sum)
            dfs(root.right, sum)
            path.pop()

        dfs(root, sum)
        return ans
a = TreeNode(2)
b = TreeNode(4)
c = TreeNode(8)
d = TreeNode(4)
e = TreeNode(8)
a.left = b
a.right = c
b.left = d
b.right = e
Solution().pathSum(a,10)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章