leetcode---131路径总和

给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。

说明: 叶子节点是指没有子节点的节点。

示例:
给定如下二叉树,以及目标和 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]
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值