题解 | JZ84 二叉树中和为某一值的路径(三)

这道题可以分成两步,先遍历所有的节点,再在当前节点上,寻找路径。

按照这种方法不会重复,也不会遗漏。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param sum int整型 
     * @return int整型
     */
    
    int ans = 0;
    int FindPath(TreeNode* root, int sum) {
        // write code here
        if (!root) return 0;
        FindPath2(root, sum, root->val);
        if (root->left) FindPath(root->left, sum);
        if (root->right) FindPath(root->right, sum);
        return ans;
    }
    
    void FindPath2(TreeNode* root, int sum, int now) {
        if (!root) return;
//         int res = 0;
        
        if (sum == now) ans++;
        
        if (root->left) {
            FindPath2(root->left, sum, now+root->left->val);
        }
        
        if (root->right) {
            FindPath2(root->right, sum, now+root->right->val);
        }
        return ;
    }
};
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param root TreeNode类 
# @param sum int整型 
# @return int整型
#
class Solution:
    ans = 0
    def FindPath(self , root: TreeNode, sum: int) -> int:
        # write code here
        if not root:
            return 0
        
        self.FindPath2(root, sum, root.val)
        self.FindPath(root.left, sum)
        self.FindPath(root.right, sum)
        return self.ans
    
    def FindPath2(self, root: TreeNode, sum: int, now: int):
        if not root:
            return 
        
        if sum == now:
            self.ans += 1
            
        if root.left:
            self.FindPath2(root.left, sum, now + root.left.val)
        if root.right:
            self.FindPath2(root.right, sum, now + root.right.val)
        return
全部评论

相关推荐

评论
点赞
收藏
分享
牛客网
牛客企业服务