leetcode--Sum Root to Leaf Numbers
2017-08-08 12:37
441 查看
Given a binary tree containing digits from
An example is the root-to-leaf path
Find the total sum of all root-to-leaf numbers.
For example,
The root-to-leaf path
The root-to-leaf path
Return the sum = 12 + 13 =
分类:二叉树
题意:二叉树每条路径上的数组合成一个数,求这些数相加的总和
解法1:非递归后续遍历,每次遍历到叶子节点,计算当前栈内,所有节点(也就是这条路径)所代表的数,加上总和。
[java] view
plain copy
/**
* 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;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode cur = root;
int sum = 0;
do{
while(cur!=null){
queue.add(cur);
cur = cur.left;
}
TreeNode p = null;
boolean flag = true;
while(flag&&queue.size()>0){
cur = queue.peekLast();
if(cur.right==p){
if(cur.left==null&&cur.right==null){
int t_sum = 0;
for(TreeNode t:queue){
t_sum = t_sum*10+t.val;
}
sum += t_sum;
}
p = cur;
queue.pollLast();
}else{
cur = cur.right;
flag = false;
}
}
}while(queue.size()>0);
return sum;
}
}
解法2:深度搜索。关键在于,对于每个节点,我们要知道它之前和是多少。
[java] view
plain copy
/**
* 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) {
return dfs(root,0);
}
/**
* cursum为root之前的总和
*/
public int dfs(TreeNode root,int cursum){
if(root==null) return 0;
if(root.left==null&&root.right==null){//如果是叶子节点
return cursum*10+root.val;//总和就是之前的*10+当前值
}
return dfs(root.left,10*cursum+root.val)+dfs(root.right,10*cursum+root.val);
}
}
原文链接http://blog.csdn.net/crazy__chen/article/details/46523567
0-9only, each root-to-leaf path could represent a number.
An example is the root-to-leaf path
1->2->3which 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->2represents the number
12.
The root-to-leaf path
1->3represents the number
13.
Return the sum = 12 + 13 =
25.
分类:二叉树
题意:二叉树每条路径上的数组合成一个数,求这些数相加的总和
解法1:非递归后续遍历,每次遍历到叶子节点,计算当前栈内,所有节点(也就是这条路径)所代表的数,加上总和。
[java] view
plain copy
/**
* 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;
LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode cur = root;
int sum = 0;
do{
while(cur!=null){
queue.add(cur);
cur = cur.left;
}
TreeNode p = null;
boolean flag = true;
while(flag&&queue.size()>0){
cur = queue.peekLast();
if(cur.right==p){
if(cur.left==null&&cur.right==null){
int t_sum = 0;
for(TreeNode t:queue){
t_sum = t_sum*10+t.val;
}
sum += t_sum;
}
p = cur;
queue.pollLast();
}else{
cur = cur.right;
flag = false;
}
}
}while(queue.size()>0);
return sum;
}
}
解法2:深度搜索。关键在于,对于每个节点,我们要知道它之前和是多少。
[java] view
plain copy
/**
* 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) {
return dfs(root,0);
}
/**
* cursum为root之前的总和
*/
public int dfs(TreeNode root,int cursum){
if(root==null) return 0;
if(root.left==null&&root.right==null){//如果是叶子节点
return cursum*10+root.val;//总和就是之前的*10+当前值
}
return dfs(root.left,10*cursum+root.val)+dfs(root.right,10*cursum+root.val);
}
}
原文链接http://blog.csdn.net/crazy__chen/article/details/46523567
相关文章推荐
- LeetCode "Sum Root to Leaf Numbers"
- [LeetCode 129] - 根节点到叶子节点数字求和(Sum Root to Leaf Numbers)
- Leetcode Sum Root to Leaf Numbers
- [Leetcode][JAVA] Sum Root to Leaf Numbers
- LeetCode-Sum Root to Leaf Numbers
- [LeetCode]Sum Root to Leaf Numbers
- LeetCode:Sum Root to Leaf Numbers
- Leetcode Sum Root to Leaf Numbers
- 【Leetcode】Sum Root to Leaf Numbers
- leetcode 129 —— Sum Root to Leaf Numbers
- [LeetCode] Sum Root to Leaf Numbers
- LeetCode:Sum Root to Leaf Numbers
- leetcode_Sum Root to Leaf Numbers _DFS_中等难度
- 【leetcode】Sum Root to Leaf Numbers(hard)
- LeetCode 129 Sum Root to Leaf Numbers
- [leetcode] Sum Root to Leaf Numbers
- [leetcode]Sum Root to Leaf Numbers
- leetcode_c++:树:Sum Root to Leaf Numbers(129)
- leetcode — sum-root-to-leaf-numbers
- LeetCode_Sum Root to Leaf Numbers