题解 | #二叉树中和为某一值的路径(三)#

二叉树中和为某一值的路径(三)

https://www.nowcoder.com/practice/965fef32cae14a17a8e86c76ffe3131f

python3 DFS + 哈希表,双O(n)复杂度。
利用哈希表维护:从根出发的路径和 及其 对应的条数。
当前节点,如果是这样的情况:当前累加和temp - 目标和sum 在哈希表出现,则意味着出现了累加和sum,累加和sum的条数就是temp - sum的条数。如果没出现temp - sum,也就没出现sum。当前累加和同理,出现了则+1,没出现作为键写入哈希表,值为1。
(temp - sum + sum = temp,总和temp,temp-sum的条数就是sum的条数,想象一张琴的琴弦(两端都固定在一点上的),一端有多条路径和为temp-sum的路,那么自然也有同样多条路径和为sum的路,到达另一端)
理解了这个哈希表的作用,剩下就好理解了。
class Solution:
    def FindPath(self, root: TreeNode, sum: int) -> int:
        # 哈希表来记录路径和(从根)及对应条数
        # 路径和为0的有1条
        self.mp = dict()
        self.mp[0] = 1
        
        # lastsum为到上一层为止的累加和
        def dfs(root: TreeNode, sum: int, lastsum: int) -> int:
            # 空结点直接返回
            if root is None:
                return 0
            res = 0
            # 到目前结点为止的累加和
            temp = root.val + lastsum
            # 如果该累加和减去sum在哈希表中出现过,相当于减去前面的分支
            if (temp - sum) in self.mp:
                # 加上有的路径数
                res += self.mp[temp - sum]
            # 增加该次路径和
            if temp in self.mp:
                self.mp[temp] += 1
            else:
                self.mp[temp] = 1
            # 进入子结点
            res += dfs(root.left, sum, temp)
            res += dfs(root.right, sum, temp)
            # 回退该路径和,因为别的树枝不会经过这里了
            self.mp[temp] -= 1
            return res

        return dfs(root, sum, 0)


全部评论

相关推荐

03-01 19:30
已编辑
南京大学 Java
点赞 评论 收藏
分享
03-26 08:58
已编辑
门头沟学院 Java
ttl: 3.19一面晚上过3.20二面3.23oc3.25offerbase:末9有一段中小厂实习一面面经:(总体时长一个小时二十分钟左右没什么八股,主要都是问项目和场景题1.实习(问了有四十分钟,感觉面试官很看重实习这一块,一直在拷打,问到后面我都要疯了,好在准备得比较充分1️⃣用的是什么中间件,有参与技术选型吗,实习的项目里为什么选这个RabbitMQ而不是kafka,为什么不用RocketMQ,为什么放弃异步,自己的项目里面使用的是kafka,那你觉得项目和实习的中间件选型有差异的原因是什么,他们之间的区别在哪里,底层的原因知道吗(高柱到这里已经快疯了,但是硬着头皮答完了,主要是从一致性吞吐量和框架的契合度答,面试官说答得挺好的,应该是没什么问题,这一块就问了快半个小时,到这里我已经快疯了2️⃣项目怎么对接上下游3️⃣介绍项目的难点重点4️⃣微服务(高柱实习是单体项目没涉及这一块5️⃣Redis的使用2.项目:1️⃣智能客服是怎么应用在项目里的(langchain4j➕rag➕functioncalling)2️⃣RAG了解多少3️⃣文本向量化的难点是什么,了解哪些大模型的知识(我一点不懂,纯瞎扯,但貌似扯对了4️⃣对ai的态度是什么,aicoding相关5️⃣怎么保证多节点下Caffeine缓存里面数据都是一致的(答的是短ttl,面试官不是很满意,但是我确实不太懂这个怎么保证,后来查了还是不懂怎么保证6️⃣Redis的使用,和你的实习项目的使用有区别吗,还有一些引申问题3.八股(含量不高,就是走个过场1️⃣进程的内存布局2️⃣Redis三剑客3️⃣微服务相关知识(高柱已经忘得差不多了…勉强答上来4️⃣JVM5️⃣线程状态6️⃣线程安全,在你的实习项目里怎么保证线程安全的(又绕回来了4.智商题找异常球5.手撕:1️⃣五道sql,不难2️⃣力扣不重叠的滑动窗口数组,贪心➕双指针秒了强度拉满了这个一面,高柱到后面人都是傻的二面面经:(就半个小时实习拷打,简历上写了几点就问了几点,问完就结束了,无手撕
查看19道真题和解析
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 一张图晒出你司的标语 #
4255次浏览 75人参与
# AI面会问哪些问题? #
27541次浏览 551人参与
# 开放七大实习专项,百度暑期实习值得冲吗 #
15093次浏览 221人参与
# 你的实习产出是真实的还是包装的? #
20041次浏览 342人参与
# 找AI工作可以去哪些公司? #
8950次浏览 232人参与
# 春招至今,你的战绩如何? #
64488次浏览 575人参与
# 米连集团26产品管培生项目 #
13293次浏览 285人参与
# 从事AI岗需要掌握哪些技术栈? #
8813次浏览 301人参与
# 你做过最难的笔试是哪家公司 #
33117次浏览 230人参与
# 中国电信笔试 #
31933次浏览 292人参与
# 投递几十家公司,到现在0offer,大家都一样吗 #
340712次浏览 2173人参与
# 哪些公司真双非友好? #
69557次浏览 289人参与
# 阿里笔试 #
178372次浏览 1314人参与
# 机械人避雷的岗位/公司 #
62693次浏览 393人参与
# 第一份工作一定要去大厂吗 #
14429次浏览 122人参与
# 金三银四,你的春招进行到哪个阶段了? #
22050次浏览 280人参与
# 为了减少AI幻觉,你注入过哪些设定? #
26232次浏览 310人参与
# 沪漂/北漂你觉得哪个更苦? #
9764次浏览 193人参与
# HR最不可信的一句话是__ #
6163次浏览 113人参与
# 应届生第一份工资要多少合适 #
20663次浏览 86人参与
# AI时代,哪个岗位还有“活路” #
11431次浏览 340人参与
# 春招你拿到offer了吗 #
831100次浏览 9986人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务