437. 路径总和 III

这道题做了很多遍了,在字节训练营笔试做过,虽然那次只做对了两道题目

这是深度遍历,没什么好说的,每个结点都深度遍历一遍,用队列保存每个结点,依次遍历,想不到效率还行

 

查看代码
/**
 * 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 pathSum(TreeNode* root, int targetSum) {
        int number = 0;
        if(root == nullptr){
            return number;
        }
        queue<TreeNode* >s;
        s.push(root);
        while(!s.empty()){
            TreeNode* temp = s.front();
            if(temp->left !=nullptr){
                s.push(temp->left);
            }
            if(temp->right!=nullptr){
                s.push(temp->right);
            }
            s.pop();
            count(temp,targetSum,number,0);
        }
        return number;
    }
    void count(TreeNode* root,int targetSum,int& number,int temp_num){
        if(root == nullptr){
            return;
        }
        if(temp_num+root->val==targetSum){
            number++;
        }
        count(root->left,targetSum,number,temp_num+root->val);
        count(root->right,targetSum,number,temp_num+root->val);
    }
};
posted @ 2022-01-03 12:35  jozon  阅读(31)  评论(0)    收藏  举报