Sum Root to Leaf Numbers

来源:互联网 发布:可牛软件下载 编辑:程序博客网 时间:2024/06/05 16:34

题目:

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.

分析:

dfs

深度搜索的时候记住路径即可

参考代码如下:
递归版本:

public int sumNumbers(TreeNode root) {    if(root == null)         return 0;     return dfs(root, 0, 0);} public int dfs(TreeNode node, int num, int sum){    if(node == null) return sum;     num = num*10 + node.val;     // leaf    if(node.left == null && node.right == null) {        sum += num;        return sum;    }     // left subtree + right subtree    sum = dfs(node.left, num, sum) + dfs(node.right, num, sum);    return sum;}
非递归版本:

/** * 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) {    int result = 0;    if(root==null)        return result;     ArrayList<ArrayList<TreeNode>> all = new ArrayList<ArrayList<TreeNode>>();    ArrayList<TreeNode> l = new ArrayList<TreeNode>();    l.add(root);    dfs(root, l, all);     for(ArrayList<TreeNode> a: all){        StringBuilder sb = new StringBuilder();        for(TreeNode n: a){            sb.append(String.valueOf(n.val));        }        int currValue = Integer.valueOf(sb.toString());        result = result + currValue;    }     return result;} public void dfs(TreeNode n, ArrayList<TreeNode> l,  ArrayList<ArrayList<TreeNode>> all){    if(n.left==null && n.right==null){        ArrayList<TreeNode> t = new ArrayList<TreeNode>();        t.addAll(l);        all.add(t);    }     if(n.left!=null){        l.add(n.left);        dfs(n.left, l, all);        l.remove(l.size()-1);    }     if(n.right!=null){        l.add(n.right);        dfs(n.right, l, all);        l.remove(l.size()-1);    } }}



0 0
原创粉丝点击