輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和爲輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
思路:
dfs(root)裏面套dfs(root.left),dfs(root.right)就是dfs,遞歸出口是空節點。ans和path分別用來存儲滿足條件的path和path的過程。
最好用PyCharm debug走一下過程即可。
給定如下二叉樹,以及目標和 sum = 22,
5
/ \
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)