[leetcode: Python]437.Path Sum 3
来源:互联网 发布:godaddy免费域名 编辑:程序博客网 时间:2024/05/18 20:05
Title:
You are given a binary tree in which each node contains an integer value.
Find the number of paths that sum to a given value.
The path does not need to start or end at the root or a leaf, but it must go downwards (traveling only from parent nodes to child nodes).
The tree has no more than 1,000 nodes and the values are in the range -1,000,000 to 1,000,000.
Example:
root = [10,5,-3,3,2,null,11,3,-2,null,1], sum = 8 10 / \ 5 -3 / \ \ 3 2 11 / \ \3 -2 1Return 3. The paths that sum to 8 are:1. 5 -> 32. 5 -> 2 -> 13. -3 -> 11
寻找路径和等于给定值的路径数量
方法一:1355ms(OMG……)
遍历+递归
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneclass Solution(object): def pathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: int """ def traverse(root, val): if not root: return 0 res = (val == root.val) res += traverse(root.left, val - root.val) res += traverse(root.right, val - root.val) return res if not root: return 0 ans = traverse(root, sum) ans += self.pathSum(root.left, sum) ans += self.pathSum(root.right, sum) return ans
方法二:122ms
class Solution(object): def pathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: int """ self.count=0 self.helper(root,sum,0,{0:1}) return self.count def helper(self,root,sum,currSum,cache): if root: if ((currSum+root.val-sum) in cache): self.count+=cache.get(currSum+root.val-sum) cache[currSum+root.val] = cache.get(currSum+root.val,0)+1 self.helper(root.left,sum,currSum+root.val,cache) self.helper(root.right,sum,currSum+root.val,cache) cache[currSum+root.val]=cache.get(currSum+root.val)-1 return
方法三:76ms(to be understood)
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Nonefrom collections import defaultdictclass Solution(object): def inorder(self, root, target, summ, di): if not root: return 0 summ += root.val numWays = di[summ-target] di[summ] += 1 numWays += self.inorder(root.left, target, summ, di) + self.inorder(root.right, target, summ, di) di[summ] -= 1 return numWays def pathSum(self, root, target): di = defaultdict(int) di[0] = 1 return self.inorder(root, target, 0, di) """ :type root: TreeNode :type sum: int :rtype: int """
方法四:79ms(+1)
# Definition for a binary tree node.# class TreeNode(object):# def __init__(self, x):# self.val = x# self.left = None# self.right = Noneimport collectionsclass Solution(object): def pathSum(self, root, sum): """ :type root: TreeNode :type sum: int :rtype: int """ d = collections.defaultdict(int) d[0] = 1 def pSum(root, cur, sum): if not root: return 0 res = 0 cur += root.val if cur - sum in d: res += d[cur - sum] d[cur] += 1 res += pSum(root.left, cur, sum) + pSum(root.right, cur, sum) d[cur] -= 1 return res return pSum(root, 0, sum)
阅读全文
0 0
- [leetcode: Python]437.Path Sum 3
- Path Sum Leetcode Python
- 【Leetcode】【python】Path Sum
- 【LeetCode with Python】 Path Sum
- 【LeetCode】【Python】Minimum Path Sum
- [leetcode: Python]112. Path Sum
- 【Leetcode】【python】Path Sum II
- 【Leetcode】【python】Minimum Path Sum
- 【LeetCode with Python】 Path Sum II
- 【leetCode】Path Sum II python实现
- Leetcode path-sum-ii Python Java
- LeetCode 64. Minimum Path Sum(Python)
- 【leetcode】112. Path Sum(Python & C++)
- [python]leetcode(437). Path Sum III
- [Leetcode][python]Binary Tree Maximum Path Sum
- LeetCode 437. Path Sum III
- LeetCode 437. Path Sum III
- LeetCode 437. Path Sum III
- const与static关键字
- service的onStartCommand
- Unity与iOS相互调起、交互
- yv12、I420、nv12、nv21相互转换
- iOS中通过设置CSS改变WebView字体大小,颜色,背景颜色
- [leetcode: Python]437.Path Sum 3
- 苹果核
- Struts2_指定Struts2处理的请求后缀、常用常量
- 递归获取父节点下所有的子节点 无限分级
- 微软亚研院华刚对科研的见解
- Solved:无法建立目录wp-content/uploads.有没有上级目录的写权限?
- Alpha、Beta、RC、GA版本的区别
- codeforces Round 21 808DArray Division
- 简单了解-RestFul