leetcode深度搜索DFS--路径之和

1. 112 路径之和

在这里插入图片描述
这个题目的最大特点就是起点是根节点,终点是叶子节点,存在一条符合条件的路径就返回True

1.1 方法一: 可以结合栈,来先序遍历完,看是否存在满足条件的路径:

class Solution:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if not root:
            return False
        stacks=[(sum-root.val,root)]
        flag=False
        while stacks:
            sum,node=stacks.pop();
            if sum==0 and node.left==None and node.right==None:
                flag=True
                break
            if node.left:
                stacks.append((sum-node.left.val,node.left))
            if node.right:
                stacks.append((sum-node.right.val,node.right)) 
        return flag  

1.2 方法二:深度搜索

class Solution:
    def hasPathSum(self, root: TreeNode, sum: int) -> bool:
        if not root:
           return False
        flag = False    
        def sumTree(root, res):
            nonlocal flag 
            if not root:
                if res == sum:
                    flag=True
                return  
            if not root.left and not root.right:
                if (res + root.val) == sum:
                    flag=True
                return       
            if flag == True:
                return   
            if root.left:
                sumTree(root.left, res + root.val)
            #sumTree(root.right, res)  
            if root.right:  
                sumTree(root.right, res+ root.val)
        sumTree(root,0)   
        return flag  

2. 113 路径之和II

在这里插入图片描述

2.1 结合栈,先序遍历(也可以是中序或者后序遍历)

class Solution:
    def pathSum(self, root: TreeNode, sum_: int) -> List[List[int]]:
        if not root:
            return []
        result=[]
        res=[root.val]
        stacks =[(res,root)]
       
        while stacks:
           res,node=stacks.pop()
           if not node.left and not node.right and (sum(res)==sum_): 
               result.append(res)
           if node.right:
               stacks.append((res+[node.right.val],node.right))   #    
           if node.left:
               stacks.append((res+[node.left.val],node.left))     #
          
               #stacks.append((sum-node.right.val,res.append(node.right.val),node.right))   
        return result 

2.2 深度搜索

class Solution:
    def pathSum(self, root: TreeNode, sum_val: int) -> List[List[int]]:
        if not root:
           return []
        result = []    
        def sumTree(root, res):
            if not root:
                if sum(res) == sum_val:
                    result.append(res)
                return    
            if not root.left and not root.right:
                if (sum(res) + root.val) == sum_val:
                    result.append(res+[root.val])
                return       
            if root.left:
                sumTree(root.left, res + [root.val])
            #sumTree(root.right, res)  
            if root.right:  
                sumTree(root.right, res+ [root.val])
        sumTree(root,[])   
        return result
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值