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);
            }
        }
        
    }
  • 相关阅读:
    C# 类与类的关系(2)
    如何成为一个优秀的程序员?
    设计模式详细系列教程 (二) 创建型模式
    UML系列 (四) 实战机房收费系统
    UML系列 (三) 四种关系
    HDU 4003 Find Metal Mineral(树形DP+分组背包)
    从零开始的acm竞赛生涯
    2016 ACMICPC ECFinal题解整理
    第四章 复杂选择结构
    第五章 循环结构
  • 原文地址:https://www.cnblogs.com/timoBlog/p/4644486.html
Copyright © 2011-2022 走看看