给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。
说明: 叶子节点是指没有子节点的节点。
示例:
给定如下二叉树,以及目标和 sum = 22,
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
返回:
[
[5,4,11,2],
[5,8,4,5]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-sum-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
先把题贴上来。这里无非就是递归回溯然后找到输出条件即可
这里先贴下二叉树的前中后遍历代码
class Tree():
def __init__(self):
pass
def front(self,root):
res = []
def back(root,res):
if root is None:
return
res.append(root.val)
back(root.left,res)
back(root.right,res)
back(root,res)
return res
def mid(self,root):
res = []
def back(root,res):
if root is None:
return
back(root.left,res)
res.append(root.val)
back(root.right,res)
back(root,res)
return res
def behind(self,root):
res = []
def back(root,res):
if root is None:
return
back(root.left,res)
back(root.right,res)
res.append(root.val)
back(root,res)
return res
############调用
solu = Tree()
front = solu.front(root)
mid = solu.front(root)
behind = solu.behind(root)
输出:
[5, 4, 11, 7, 2, 8, 13, 4, 5, 1]
[7, 11, 2, 4, 5, 13, 8, 5, 4, 1]
[7, 2, 11, 4, 13, 5, 1, 4, 8, 5]
这里我们再看下这个题,首先我们前序遍历出所有的路径
1.判断是否为叶节点,如果是则判断是否sum==target
2.利用回溯找到所有的路径
class Solution():
def pathSum(self,root,target):
front = []
res = []
self.back(root,front,res)
return res
def back(self,root,front,res):
if root is None:
return
front.append(root.val)
self.back(root.left,front,res)
self.back(root.right,front,res)
if root.left is None and root.right is None:
tt = [i for i in fron]
if sum(tt) == target:
res.append(tt)
return
front.pop()
###########调用
solu = Solution()
target = 22
res = soul.pathSum(root,target)
print(res)
........
[
[5,4,11,2],
[5,8,4,5]
]