文巾解题 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的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode(算法)- 113. 路径总和 II

113. 路径总和 II

LeetCode第113题—路径总和II—Python实现

113路径总和II

LeetCode 113 路径总和II

Leetcode113. 路径总和 II