文巾解题 113. 路径总和 II
Posted UQI-LIUWJ
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文巾解题 113. 路径总和 II相关的知识,希望对你有一定的参考价值。
1 题目描述
2 解题思路
2.1BFS 广度优先搜索
我们设计一个这样的队列
队列的每个元素是一个三元数组:从根节点到当前点的路径总和+当前节点+从根节点到当前节点的路径
每次我们从队列中弹出一个元素的时候,我们考虑这个元素所对应的节点是不是叶子节点,如果是的话,判断当前路径总和是否是我们的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: Optional[TreeNode], targetSum: int) -> List[List[int]]:
if(root==None):
return None
tmp=[[root.val,root,[root.val]]]
ret=[]
while(tmp):
x=tmp.pop(0)
if(x[1].right==None and x[1].left==None):
#判断是否是叶子节点
print(x)
if(x[0]==targetSum):
#判断叶子节点的路径总和是否是target
ret.append(x[2])
elif(x[1].right==None):
tmp.append([x[0]+x[1].left.val,x[1].left,x[2]+[x[1].left.val]])
elif(x[1].left==None):
tmp.append([x[0]+x[1].right.val,x[1].right,x[2]+[x[1].right.val]])
else:
tmp.append([x[0]+x[1].left.val,x[1].left,x[2]+[x[1].left.val]])
tmp.append([x[0]+x[1].right.val,x[1].right,x[2]+[x[1].right.val]])
#是否有左右儿子,有的话,将他们对应的元素加入队列中
return(ret)
2.2 DFS深度优先遍历
和BFS类似,DFS的参数也有三个
# 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: Optional[TreeNode], targetSum: int) -> List[List[int]]:
if(root==None):
return None
ret=[]
def dfs(val,node,lst):
#print(val,node,lst)
#print('\\n')
if(node.left==None and node.right==None and val==targetSum):
ret.append(lst)
elif(node.left==None and node.right==None and val!=targetSum):
pass
if(node.right!=None):
dfs(val+node.right.val,node.right,lst+[node.right.val])
if(node.left!=None):
dfs(val+node.left.val,node.left,lst+[node.left.val])
dfs(root.val,root,[root.val])
return(ret)
以上是关于文巾解题 113. 路径总和 II的主要内容,如果未能解决你的问题,请参考以下文章