[LeetCode] 666. Path Sum IV 二叉树的路径和 IV
If the depth of a tree is smaller than 5
, then this tree can be represented by a list of three-digits integers.
For each integer in this list:
- The hundreds digit represents the depth
D
of this node,1 <= D <= 4.
- The tens digit represents the position
P
of this node in the level it belongs to,1 <= P <= 8
. The position is the same as that in a full binary tree. - The units digit represents the value
V
of this node,0 <= V <= 9.
Given a list of ascending
three-digits integers representing a binary with the depth smaller than 5. You need to return the sum of all paths from the root towards the leaves.
Example 1:
Input: [113, 215, 221] Output: 12 Explanation: The tree that the list represents is: 3 / \ 5 1 The path sum is (3 + 5) + (3 + 1) = 12.
Example 2:
Input: [113, 221] Output: 4 Explanation: The tree that the list represents is: 3 \ 1 The path sum is (3 + 1) = 4.
还是二叉树的路径之和,但树的存储方式变了,使用一个三位的数字来存的,百位是该结点的深度,十位是该结点在某一层中的位置,个位是该结点的值。
Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | class Solution( object ): def pathSum( self , nums): """ :type nums: List[int] :rtype: int """ class Node( object ): def __init__( self , num): self .level = num / 100 - 1 self .i = (num % 100 ) / 10 - 1 self .val = num % 10 self .leaf = True def isParent( self , other): return self .level = = other.level - 1 and \ self .i = = other.i / 2 if not nums: return 0 result = 0 q = collections.deque() dummy = Node( 10 ) parent = dummy for num in nums: child = Node(num) while not parent.isParent(child): result + = parent.val if parent.leaf else 0 parent = q.popleft() parent.leaf = False child.val + = parent.val q.append(child) while q: result + = q.pop().val return result |
C++:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | class Solution { public : int pathSum(vector< int >& nums) { if (nums.empty()) return 0; int res = 0; unordered_map< int , int > m; for ( int num : nums) { m[num / 10] = num % 10; } helper(nums[0] / 10, m, 0, res); return res; } void helper( int num, unordered_map< int , int >& m, int cur, int & res) { int level = num / 10, pos = num % 10; int left = (level + 1) * 10 + 2 * pos - 1, right = left + 1; cur += m[num]; if (!m.count(left) && !m.count(right)) { res += cur; return ; } if (m.count(left)) helper(left, m, cur, res); if (m.count(right)) helper(right, m, cur, res); } }; |
类似题目:
[LeetCode] 113. Path Sum II 路径和 II
[LeetCode] 437. Path Sum III 路径和 III
All LeetCode Questions List 题目汇总
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构