问题描述:
Given a binary tree containing digits from 0-9
only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path 1->2->3
which represents the number 123
.
Find the total sum of all root-to-leaf numbers.
For example,
1 / \ 2 3
The root-to-leaf path 1->2
represents the number 12
.
The root-to-leaf path 1->3
represents the number 13
.
Return the sum = 12 + 13 = 25
.
原问题链接:https://leetcode.com/problems/sum-root-to-leaf-numbers/
问题分析
这个问题的要求比较有意思,因为它要计算所有从根到叶节点构成的值,并且要将它们所有的和计算出来。从根节点到叶节点的过程相当于一个10进制的过程,每下一层,就对前面的值乘以十再加上当前层的值。
那么在实现中我们就需要想办法求到从根节点到叶节点最终形成的值。对树中间任意节点来说,我们就需要有一个对应的位置保存有到这个节点的值,然后对于它的子节点就可以用这个当前值再乘以十再相加了。为了得到这最终形成的值,我们需要对树做一个遍历,这样才能保证覆盖到所有的节点。在遍历的过程中,我们判断出所有左右子树节点都为空的节点才算是叶节点。现在的问题就是要选择哪种树遍历的方法了。我们可以选择树的层次化遍历方法,用一个队列,不断的将队列里的元素取出来,然后将它所有存在的子节点加入到队列中。前面也提到过,对应的节点也需要有一个对应的值,我们可以用另外一个队列和它同步的保存对应的值。这样每次从节点队列里取元素出来的时候,我们也取对应的值队列里的元素。如果当前节点的左右子树为空,则它符合条件,我们将它累加到一个全局的变量中。如果它有非空的节点,则将这个节点对应的值乘以十再加那个节点的值,并将这个值加入到值队列中。
按照这个思路,我们得到的详细实现如下:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public int sumNumbers(TreeNode root) { if(root == null) return 0; int sum = 0; Queue<Integer> numQueue = new LinkedList<>(); Queue<TreeNode> nodeQueue = new LinkedList<>(); numQueue.add(root.val); nodeQueue.add(root); while(!nodeQueue.isEmpty()) { TreeNode node = nodeQueue.remove(); int num = numQueue.remove(); if(node.left == null && node.right == null) { sum += num; continue; } if(node.left != null) { nodeQueue.add(node.left); numQueue.add(num * 10 + node.left.val); } if(node.right != null) { nodeQueue.add(node.right); numQueue.add(num * 10 + node.right.val); } } return sum; } }
相关推荐
129. Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number. An example is the root-to-leaf path 1->2->3 which represents ...
python python_leetcode题解之129_Sum_Root_to_Leaf_Numbers
javascript js_leetcode题解之129-sum-root-to-leaf-numbers.js
lru cache leetcode leetcode 记录自己刷leetcode时遇到的一些值得记下来的题目, 分为一些子项 bytedance daily:每日一题 struct-algorithm:数据结构/算法先关 ...sum-root-to-leaf-numbers best-time-to-buy
Sum_Root_to_Leaf_Numbers DFS Surrounded_Regions 由四周‘O’开始向内检索,利用第三个字符对可以变换的‘O’进行暂存 Word_Lader BFS,避免DFS记录以遍历的节点错误,且保证优先找到最短的路径, 按照图的方法判断...
leetcode卡 leetcode_python 项目介绍 想学学python,刷刷leetcode 打卡轨迹 2020-01-13 70 爬楼梯 2020-01-14 120 Triangle 2020-01-15 213 House Robberll -变种 198 337 2020-01-16 139 单词拆分 2020-01-20 104 ...
- **Sum Root to Leaf Numbers**:计算二叉树所有从根到叶子节点的路径之和。 4. **动态规划(Dynamic Programming)**: - **Best Time To Buy and Sell Stock**:股票交易的最佳时机问题。 - **Unique Paths**...
在本压缩包中,我们关注的是一个与Python编程和LeetCode面试相关的题目,具体是第129题——"Sum Root to Leaf Numbers"(根到叶节点数字之和)。这是一道典型的树形结构问题,涉及到二叉树的遍历。在LeetCode上,...
leetcode 530 LeetCode 问题列表,包括锁定的问题。 [1028] Recover a Tree From Preorder Traversal Hard (73.62 %) [1027] Longest Arithmetic Sequence Medium (41.26 %) [1026] Maximum Difference Between Node...
leetcode 和 oj 力码 一些基于 Java 的有趣的 OJ 实践。 主要来自 LeetCode,部分来自 LintCode 和 Google OJ。 细绳 - 添加二进制 大批 - 计数位-第三个最大数量 堆栈和堆 -解码字符串- 在每个树行中找到最大值- ...
gas station leetcode 在牛客网上的在线编程中的leetcode在线编程题解 代码中有详细题解 ...sum-root-to-leaf-numbers 动态规划 distinct-subsequences 递归 valid-palindrome 模拟 pascals-triangle 模拟 pasca