leetcode 129 求根结点到叶结点数字之和

132 阅读1分钟

leetcode 129 求根结点到叶结点数字之和

DFS or BFS

思路:

DFS

  1. 深度优先遍历树,每一层和 sum 都 * 10;
  2. 到叶子结点直接加上个位数返回;

BFS

  1. 广度优先遍历树模板
  2. 压入父节点时,把父节点的val * 10 加入子结点上

题解

DFS:

class Solution {
public:
    int sumNumbers(TreeNode* root) {
        return dfs(root, 0);
    }
    long long dfs(TreeNode *root, long long sum) {
        if(!root) return 0;
        // 叶子结点直接加上个位数返回
        if(!root->left && !root->right) return sum + root->val;
        sum += root->val;
        // 每下一层当前值 * 10
        return dfs(root->left, sum * 10) + dfs(root->right, sum * 10);
    }
};

BFS:

class Solution {
public:
    queue<TreeNode *> q;
    //常规的bfs模板+把父结点*10加入儿子中
    int sumNumbers(TreeNode* root) {
       if(!root) return 0;
       q.push(root);
       int ans=0;
       while(!q.empty()){
           int size=q.size();
           for(int i=0;i<size;i++) {
                auto cur=q.front();q.pop();
                //碰到叶子节点直接入ans
                if(!cur->left&&!cur->right) ans+=cur->val;
                //把原有节点*10加到子节点上
                if(cur->left) {
                    cur->left->val+=cur->val*10;
                    q.push(cur->left); 
                }
                if(cur->right) {   
                    cur->right->val+=cur->val*10;
                    q.push(cur->right);
                }
           }
       }
       return ans;
    }
};