机考刷题之 2 LeetCode 112 路径总合

📅 发布时间:2026/7/13 7:37:21 👁️ 浏览次数:
机考刷题之 2 LeetCode 112 路径总合
题目分析看见评论区有人总结了二叉树递归类题型的诀窍题目中是从根节点到叶子节点每经过一个节点target值就减去这个节点的val。那么在第一个模板中当为叶子节点时我们应该判断target值减去当前的叶子节点的val后最后是否为0如果是则返回true反之为false。如果只是中间节点那么则需要继续递归遍历其左右子节点。还要注意节点为空直接返回false。代码/** * 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: bool hasPathSum(TreeNode* root, int targetSum) { if(root nullptr) return false;//如果是空节点就返回false targetSum targetSum - root-val; if(root-left nullptr root-right nullptr ){//叶子节点判断是否满足条件即目标值一路减下来到叶子节点时是否为0 return targetSum 0; } return hasPathSum(root-left,targetSum) || hasPathSum(root-right,targetSum);//如果不是叶子节点也不是空节点就遍历左右子节点 } };结果关于二叉树递归千问给出的诀窍总结写递归要牢记三要素1️⃣递归的定义做什么函数hasPathSum(root, targetSum)表示以 root 为起点是否存在一条到叶子的路径使得路径和等于 targetSum。2️⃣递归的终止条件边界如果root null说明走到空节点了 → 不是有效路径 → 返回false。如果root是叶子左右都为空那么检查root.val targetSum是否成立。3️⃣递归的拆解如何缩小问题当前节点不是叶子那就把问题交给左右子树左子树是否有一条路径和为targetSum - root.val或者右子树是否有只要一边满足就返回true。