求根结点到叶结点数字之和-力扣129

72 阅读1分钟

求根结点到叶结点数字之和-力扣129

无脑暴力

dfs向下深搜,记录当前结点的所代表的数值,向下一直统计到叶子结点,叶子结点的的num值即为该路径上的数字之和。最后再退递归栈,一路返回直至所有的值全部汇总在根结点上。联想到了哈夫曼树的wpl的求法。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:

    int dfs(TreeNode* root, int num){
        if(root == nullptr)//递归出口,叶子结点的两个空儿子不具备数字
            return 0;

        int myNum = num * 10 + root->val;

        if(root->left==nullptr && root->right==nullptr)  
            return myNum;  //叶子结点将自己的数字返回
        else
            return dfs(root->left, myNum) + dfs(root->right, myNum); // 非叶结点继续向下深搜并等待接受返回值

    }

    int sumNumbers(TreeNode* root) {
        return dfs(root, 0);
    }
};

时间复杂度:O(n)O(n)

空间复杂度: 平均O(logn)O(logn),最坏O(n)O(n)