您的位置:首页 > 其它

leetcode--Sum Root to Leaf Numbers

2017-08-08 12:37 441 查看
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:非递归后续遍历,每次遍历到叶子节点,计算当前栈内,所有节点(也就是这条路径)所代表的数,加上总和。

[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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: