您的位置:首页 > 其它

DFS Sum Root to Leaf Numbers

2015-05-18 14:54 239 查看
思路:

DFS。

时间复杂度O(N),空间复杂度O(logN)。

/**
 * 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 {
private:
    void dfs(int sum, int &total_sum, TreeNode* root) {
        if(root == NULL) {
            return;
        }
        if(root->left == NULL && root->right == NULL) {
            sum = sum*10 + root->val;
            total_sum += sum;
            return;
        }
        dfs(sum*10+root->val, total_sum, root->left);
        dfs(sum*10+root->val, total_sum, root->right);
    }
public:
    int sumNumbers(TreeNode* root) {
        int sum = 0;
        int total_sum = 0;
        dfs(sum, total_sum, root);
        return total_sum;
    }
};


优化,去掉sum和total_sum中间变量。

/**
 * 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 {
private:
    int dfs(TreeNode* root, int sum) {
        if(root == NULL) return 0;
        if(root->left == NULL && root->right == NULL) {
            return 10*sum + root->val;
        }
        return dfs(root->left, 10*sum + root->val) + dfs(root->right, 10*sum + root->val);
    }
public:
    int sumNumbers(TreeNode* root) {
        return dfs(root, 0);
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: