用asp做的网站如何运行,成都网站开发公司哪家好,网站建设管理要求,做cpa用单页网站好还是路径总和
链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在#xff0c;返回 true #xff1b;否则#xff0c;返回 false 。
叶子节点…路径总和
链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径这条路径上所有节点值相加等于目标和 targetSum 。如果存在返回 true 否则返回 false 。
叶子节点 是指没有子节点的节点。
示例 1
输入root [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum 22 输出true 解释等于目标和的根节点到叶节点路径如上图所示。 示例 2
输入root [1,2,3], targetSum 5 输出false 解释树中存在两条根节点到叶子节点的路径 (1 -- 2): 和为 3 (1 -- 3): 和为 4 不存在 sum 5 的根节点到叶子节点的路径。 示例 3
输入root [], targetSum 0 输出false 解释由于树是空的所以不存在根节点到叶子节点的路径。
递归法
返回值和参数 返回值就是搜索所有路径不用处理返回值所以bool 参数节点路径和
bool traversal(TreeNode* cur,int sum)终止条件 到叶子节点值等于和不等于 if(cur-leftNULL cur-rightNULL sumtargetSum) return true;if(cur-leftNULL cur-rightNULL sum!targetSum) return false;单次递归 sumcur-val;//写在判断前就不需要回溯将sum-cur-val,此处sum值不影响其他递归的sum值if(cur-leftNULL cur-rightNULL sumtargetSum) return true;//判断叶子节点if(cur-leftNULL cur-rightNULL sum!targetSum) return false;//判断叶子节点if(cur-left) if(traversal(cur-left,sum,targetSum))return true;if(cur-right) if(traversal(cur-right,sum,targetSum)) return true;return false;详细写 if(cur-left) {sumcur-left-val;if(traversal(cur-left,sum,targetSum))return true;sum-cur-left-val;}if(cur-right) {sumcur-right-val;if(traversal(cur-right,sum,targetSum))return true;sum-cur-right-val;}sum计算的是一个子节点的值判断子节点是否符合不符合sum值要回溯的 如函数参数的节点输入为1处理左子节点2,sum2,判断是否符合不符合sum-2这种记得中要加一下看下面第二个代码
代码
class Solution {
public:bool traversal(TreeNode* cur,int sum,int targetSum){if(curNULL) return false;sumcur-val;if(cur-leftNULL cur-rightNULL sumtargetSum) return true;if(cur-leftNULL cur-rightNULL sum!targetSum) return false;if(cur-left) if(traversal(cur-left,sum,targetSum))return true;if(cur-right) if(traversal(cur-right,sum,targetSum)) return true;return false;}bool hasPathSum(TreeNode* root, int targetSum) {int sum0;return traversal(root,sum,targetSum);}
};class Solution {
public:bool traversal(TreeNode* cur,int sum,int targetSum){if(curNULL) return false;// sumcur-val;if(cur-leftNULL cur-rightNULL sumtargetSum) return true;if(cur-leftNULL cur-rightNULL sum!targetSum) return false;if(cur-left) {sumcur-left-val;if(traversal(cur-left,sum,targetSum))return true;sum-cur-left-val;}if(cur-right) {sumcur-right-val;if(traversal(cur-right,sum,targetSum))return true;sum-cur-right-val;}return false;}bool hasPathSum(TreeNode* root, int targetSum) {int sum0;if(root!NULL) sumroot-val; //用详细的中间节点就没有计算了要加上去return traversal(root,sum,targetSum);}
};