题目链接:
https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/
题意:
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
题解:
找出从根节点到叶节点的一条路,且路径上的值的总和等于target。
深度优先搜索。
代码:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def pathSum(self, root: TreeNode, target: int) -> List[List[int]]:
ret =[]
def dfs(rt:TreeNode,tmp:List[int],num:int):
if rt ==None:
if num ==target:
ret.append(list(tmp))
return
# 若是没有左右子节点,则表明是叶节点,叶节点也继续向下搜索一层,判断num?target
if rt.left==None and rt.right==None:
tmp.append(rt.val)
dfs(rt.left,tmp,num+rt.val)
tmp.pop(-1)
else:
if rt.left!=None:
tmp.append(rt.val)
dfs(rt.left,tmp,num+rt.val)
tmp.pop(-1)
if rt.right!=None:
tmp.append(rt.val)
dfs(rt.right,tmp,num+rt.val)
tmp.pop(-1)
if root:
dfs(root,[],0)
return ret;