思路:需要找到根节点到叶节点的路劲和为taget的数组,那么我们使用前中后序遍历都是一样的,因为不需要对中进行处理
//1.参数 root根节点 sum每次累加的和 tager目标值 //2.终止条件 root遍历到根节点就停止,然后来判断sum是不是和target相等 //3.单层循环 每次判断左右是否为空,不为空就把值带入到sum里(简化回溯的思想)
//112 class Solution { public: bool fun(TreeNode* root, int sum, int targetSum) { if (root == nullptr) return false; if (root->left == nullptr && root->right == nullptr) { if (sum == targetSum) return true; else return false; } bool returnA = false; if (root->left) { returnA = fun(root->left, sum + root->left->val, targetSum); } bool returnB = false; if (root->right) { returnB = fun(root->right, sum + root->right->val, targetSum); } return returnA || returnB; } bool hasPathSum(TreeNode* root, int targetSum) { if (root == nullptr) return false; return fun(root, root->val, targetSum); } };
//113 class Solution { public: vector<vector<int>> result; vector<int> path; void find(TreeNode* root, int sum, int targetSum) { path.push_back(root->val); if (root->left == nullptr && root->right == nullptr) { if (sum == targetSum) { result.push_back(path); } return; } if (root->left) { find(root->left, sum + root->left->val, targetSum); path.pop_back(); } if (root->right) { find(root->right, sum + root->right->val, targetSum); path.pop_back(); } } vector<vector<int>> pathSum(TreeNode* root, int targetSum) { if (root == nullptr) return result; find(root, root->val, targetSum); return result; }