剑指offer34 二叉树中和为某一值的路径 递归+迭代

在这里插入图片描述

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def pathSum(self, root: TreeNode, sum: int) -> List[List[int]]:
#方法一 递归  DFS
        # if not root:
        #     return [] #定义边界条件
        # res = []
        # def root_sum(node , path , sum_val):
        #     if sum_val == sum and not node.left and not node.right:
        #         res.append(path)#定义递归出口,如果到了根节点,且和为sum,则将path添加到res

        #     if node.left: #如果左子节点有值,则去递归左子节点
        #         root_sum(node.left , path+[node.left.val], sum_val + node.left.val) #注意这里是+【】
        #     if node.right:
        #         root_sum(node.right, path+[node.right.val], sum_val + node.right.val)

        # root_sum(root, [root.val], root.val) #☆注意此时的sum_val初始化为根节点的值,而不是sum
        # #[path]是值的路径,不是节点的路径,所以初始化时应该是[root.val],不是[root]
        # return res

#方法二 迭代  BFS就是迭代 使用队列实现BFS
            if not root:
                return []
            q = [(root , [root.val], root.val)] #初始化多元素队列时,一定要记着多元素是有括号的[a,b,c]×[(a,b,c)]√
            res = []
            for t in q:
                node,path,sum_val=t
                if sum_val == sum and not node.left and not node.right:
                    res.append(path)
                if node.left:
                    q.append((node.left , path + [node.left.val],sum_val+node.left.val))#队列添加多元素时也要记得括号
                if node.right:
                    q.append((node.right, path + [node.right.val],sum_val+node.right.val))
            return res

时间复杂度O(n)每个节点只需要遍历1次
空间复杂度O(n2)
递归的栈的消耗n,每个递归调用里面又要分配n个节点的路径
队列需要存n个三元组,每个元组中的路径又包含n个节点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值