• 二叉树到某一节点经过的路径


    # 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]]:
            res,path = [],[]
            def recur(root,tar):
                if not root:
                    return
                path.append(root.val)
                tar -=root.val
                if tar==0 and not root.left and not root.right:
                    res.append(list(path))
                recur(root.left,tar)
                recur(root.right,tar)
                path.pop()
            recur(root,sum)
            return res
            
    # 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]]:
            if root == None:
                return []
            res,stack = [],[]
            def getPath(root,currentSum):
                stack.append(root.val)
                currentSum += root.val
                if (currentSum == sum) and not root.left and not root.right:
                    res.append(list(stack))
                
                if root.left:
                    getPath(root.left,currentSum)
                if root.right:
                    getPath(root.right,currentSum)
                stack.pop(-1)
            getPath(root,0)
            return res

    非递归的方式

    # 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, sum1: int) -> List[List[int]]:
            result,temp = [],[]
            def dfs(root, sum1):
                if root:
                    if not root.right and not root.left: #判断是否为叶节点
                        temp.append(root.val)
                        b=sum(temp)
                        if b == sum1:
                            result.append(temp[0:]) 
                        temp.pop()
                        return 
                    temp.append(root.val)# 进栈
                    dfs(root.left, sum1)
                    dfs(root.right, sum1)
                    temp.pop()# 出栈
            dfs(root, sum1)
            return result
            
  • 相关阅读:
    Java: Chain of Responsibility Pattern
    CSharp: Chain of Responsibility Pattern
    CSharp: Command Pattern
    CSharp: Proxy Pattern
    CSharp:Flyweight Patterns
    Java: Command Pattern
    C++工厂模式
    C++实现私有化PIMPL[Private Implementation]
    Qt:Using QByteRef with an index pointing outside the valid range of a QByteArray
    std::stack
  • 原文地址:https://www.cnblogs.com/topass123/p/12773507.html
Copyright © 2020-2023  润新知