LeetCode113 路径总和面试
转载于:路径总和
给定一个二叉树和一个目标和,找到全部从根节点到叶子节点路径总和等于给定目标和的路径。app
说明: 叶子节点是指没有子节点的节点。
5
/ \
4 8
/ / \
11 13 4
/ \ / \
7 2 5 1
#_*_coding:utf-8_*_
class TreeNode(object):
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution(object):
def pathSum(self, root, sum):
result = []
self.help(root, sum, [], result)
return result
def help(self, root, sum, path, result):
if root is None:
return
#步骤相似先序遍历
path.append(root.val)
#遍历根节点
if root.left is None and root.right is None:
if sum == root.val:
result.append(list(path))
#遍历左子树
self.help(root.left, sum - root.val, path, result)
#遍历右子树
self.help(root.right, sum - root.val, path, result)
path.pop()
root = TreeNode(5)
l1 = TreeNode(4)
r1 = TreeNode(8)
root.left = l1
root.right = r1
l2 = TreeNode(11)
r2 = TreeNode(13)
r3 = TreeNode(4)
l1.left = l2
r1.left = r2
r1.right = r3
l3 = TreeNode(7)
l4 = TreeNode(2)
r4 = TreeNode(5)
r5 = TreeNode(1)
l2.left = l3
l2.right = l4
r3.left = r4
r3.right = r5
slu = Solution()
t = slu.pathSum(root,22)
print(t)