题目描述
给定一个仅包含数字 0−9 的二叉树,每一条从根节点到叶子节点的路径都可以用一个数字表示。
例如根节点到叶子节点的一条路径是1→2→3,那么这条路径就用123 来代替。
找出根节点到叶子节点的所有路径表示的数字之和
例如:
图片说明
这颗二叉树一共有两条路径,
根节点到叶子节点的路径 1→2 用数字 12 代替
根节点到叶子节点的路径 1→3 用数字 13 代替
所以答案为12+13=25。

思路:因为要求每条根节点到叶子结点的路径和。那么其实就是一个找到所有路径问题。可以通过递归的方式,由根节点不断向下遍历,找到所有的路径,并按照题目的要求计算路径和。

class Solution {
public:
    /**
     * 
     * @param root TreeNode类 
     * @return int整型
     */
    // 递归遍历
    void dfs(TreeNode* root, int num)
    {
        if(!root) return;
        //if(root->left)   //搜索左子树, 并将和传递下去
        dfs(root->left, num*10+root->val);
        //if(root->right)   //搜索右子树
        dfs(root->right, num*10+root->val);
        num = num * 10 + root->val;
        if(!root->left && !root->right){   //叶子结点,将和保存
            ans += num;
        }

    }
    int sumNumbers(TreeNode* root) {
        // write code here
        //很明显,可以采用递归的方式的计算
        dfs(root, 0);

        return ans;
    }
    int ans = 0;
};