无脑暴力
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);
}
};
时间复杂度:
空间复杂度: 平均,最坏