首页 > 代码库 > LeetCode-129 Sum Root to Leaf Numbers
LeetCode-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 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
.
1. 非递归解法
借助两个栈实现,其中一个栈保存遍历到的上层节点,另一个栈保存上一个栈中各个节点的遍历情况,即记录左子结点是否已遍历。
代码如下
public int sumNumbers(TreeNode root) { if(root == null) return 0; int sum = 0; List<TreeNode> mem = new ArrayList<TreeNode>(); List<Boolean> flag = new ArrayList<Boolean>(); mem.add(root); while(!mem.isEmpty()) { if(flag.size() < mem.size()) { flag.add(false); } else if(!flag.get(flag.size()-1)) { flag.set(flag.size()-1, true); } else { mem.remove(mem.size()-1); flag.remove(flag.size()-1); continue; } if(!flag.get(flag.size()-1)) { if(mem.get(mem.size()-1).left != null) { mem.add(mem.get(mem.size()-1).left); continue; } } flag.set(flag.size()-1, true); if(mem.get(mem.size()-1).right != null) { mem.add(mem.get(mem.size()-1).right); continue; } if(mem.get(mem.size()-1).left == null && mem.get(mem.size()-1).right == null) { for(int i=mem.size()-1; i>=0; i--) { sum += (mem.get(i).val * Math.pow(10, mem.size() - i - 1)); } } mem.remove(mem.size() - 1); flag.remove(flag.size() - 1); } return sum; }
2. 递归解法。代码如下
public int sumNumbers(TreeNode root) {
return sum(root, 0); } public int sum(TreeNode n, int s){ if (n == null) return 0; if (n.right == null && n.left == null) return s*10 + n.val; return sum(n.left, s*10 + n.val) + sum(n.right, s*10 + n.val); }
LeetCode-129 Sum Root to Leaf Numbers
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。