zoukankan      html  css  js  c++  java
  • Leetcode & CTCI ---Day 5

    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.

    My initial solution used an arrayList to hold all root to leaf numbers, and then finally add them all. 

    public class Solution {
        ArrayList<Integer> result = new ArrayList<Integer>();
        public int sumNumbers(TreeNode root) {
            if (root == null)
                return 0;
            sumNumbersHelper(root, 0);
            int total = 0;
            for (int a : result){
                total += a;
            }
            return total;
        }
        
        public void sumNumbersHelper(TreeNode root, int sum){
            if (root == null)
                return;
            sum = sum * 10 + root.val;
            if (root.left == null && root.right == null){
                result.add(sum);
                return;
            }
            else {
                if (root.left != null)
                    sumNumbersHelper(root.left, sum);
                if (root.right != null)
                    sumNumbersHelper(root.right, sum);
            }
        }
        
    }

    But later I found this much cleaner solution, do not need an arrayList. Instead, just sum them directly.

    public class Solution {
        int result = 0;
        public int sumNumbers(TreeNode root) {
            if (root == null)
                return 0;
            sumNumbersHelper(root, 0);
            return result;
        }
        
        public void sumNumbersHelper(TreeNode root, int sum){
            if (root == null)
                return;
            sum = sum * 10 + root.val;
            if (root.left == null && root.right == null){
                result += sum;
                return;
            }
            else {
                if (root.left != null)
                    sumNumbersHelper(root.left, sum);
                if (root.right != null)
                    sumNumbersHelper(root.right, sum);
            }
        }
        
    }
  • 相关阅读:
    [LoadRunner]UTF8字符格式
    Python的数字类型及其技巧
    Python的数据类型总结
    理解Python的迭代器
    一篇文章让你彻底搞清楚Python中self的含义
    Python中类的运算符重载
    深入理解Python中的生成器
    模态窗口点滴
    ASP.NET 防盗链的实现[HttpHandler]
    ASP.NET C# DataTable与Excel互操作示例
  • 原文地址:https://www.cnblogs.com/timoBlog/p/4644486.html
Copyright © 2011-2022 走看看