zoukankan      html  css  js  c++  java
  • 【Sum Root to Leaf Numbers】cpp

    题目:

    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.

    代码:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
            int sumNumbers(TreeNode* root) 
            {
                return Solution::sumFromRoot2Leaf(root, 0);
            }
            static int sumFromRoot2Leaf(TreeNode* root, int upperVal)
            {
                if ( !root ) return 0;
                if ( !root->left && !root->right ) return upperVal*10+root->val;
                return Solution::sumFromRoot2Leaf(root->left, upperVal*10+root->val) + 
                       Solution::sumFromRoot2Leaf(root->right, upperVal*10+root->val);
            }
    };

    tips:

    一开始想自低向上算,后来发现自顶向下算,每次传入上一层的值比较科学。

    ========================================

    第二次过这道题,一次AC了,沿用dfs写法。

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
            int sumNumbers(TreeNode* root)
            {
                int ret = 0;
                if ( root ) Solution::dfs(root, 0, ret);
                return ret;
            }
            static void dfs(TreeNode* root, int sum, int& ret )
            {
                if ( !root->left && !root->right )
                {
                    sum = sum*10 + root->val;
                    ret += sum;
                    return;
                }
                if ( root->left ) Solution::dfs(root->left, sum*10+root->val, ret);
                if ( root->right ) Solution::dfs(root->right, sum*10+root->val, ret);
            }
    };
  • 相关阅读:
    Javascript 进阶
    transform顺序浅谈
    js对象克隆
    js动画最佳实现——requestAnimationFrame
    svg标签
    typeof和instanceof
    js变量浅谈
    X-UA-compatible浅谈
    封装$
    面向对象
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4511477.html
Copyright © 2011-2022 走看看