113.路径总和二
113. 路径总和 II
题目链接:113.路径总和二(中等)
给你二叉树的根节点根和一个整数目标和targetSum,找出所有从根节点到叶子节点路径总和等于给定目标和的路径。
叶子节点是指没有子节点的节点。
示例 1:
输入:root=[5,4,8,11,null,13,4,7,2,null,null,5,1],targetSum=22
输出:[[5,4,11,2],[5,8,4,5]]
示例 2:
输入:root=[1,2,3],targetSum=5
输出:[]
示例 3:
输入:root=[1,2],targetSum=0
输出:[]
解题思路
该题与112.路径总和类似,不一样的是该题需要遍历完所有的路径。
递归法
代码(C++)
//递归
解决方案类{
公众号:
空的遍历(TreeNode* node,矢量路径,矢量结果,int计数){ 0
if(!节点-左边!节点-右侧){ 0
if (count==0) result.push_back(路径);
返回;
}
如果(左节点){ 0
路径。push _ back(node-left-val);
count-=node-left-val;
遍历(左节点、路径、结果、计数);//递归
计数=节点-左-瓦尔;//回溯
路径。pop _ back();//回溯
}
如果(节点-右侧){ 0
路径。push _ back(node-right-val);
count-=node-right-val;
遍历(右节点、路径、结果、计数);//递归
count=node-right-val;//回溯
路径。pop _ back();//回溯
}
}
vectorvectorntpathsum(TreeNode * root,int TargetSum){ 0
向量向量结果;
if (root==nullptr)返回结果;
向量路径;
路径。push _ back(root-val);
遍历(根、路径、结果、TargetSum-root-val);
返回结果;
}
};
代码(JavaScript)
/**
* @param {TreeNode}根目录
* @param {number} targetSum
* @return {number[][]}
*/
函数遍历(节点、路径、结果、计数){ 0
if(!节点。左边!节点。右){ 0
if (count===0) result.push([.路径]);//不能写结果。推送(路径),要深拷贝
返回;
}
?
if(节点。左){ 0
路径。push(节点。向左。val);
count-=节点。向左。瓦尔;
遍历(node.left,path,result,count);//递归
计数=节点。向左。瓦尔;//回溯
路径。pop();//回溯
}
if(节点。右){ 0
路径。push(节点。没错。val);
count-=节点。没错。瓦尔;
遍历(node.right,path,result,count);//递归
计数=节点。没错。瓦尔;//回溯
路径。pop();//回溯
}
返回错误的
}
?
var pathSum=函数(根,TargetSum){ 0
让结果=[];
if (root===null)返回结果;
让路径=[];
路径。push(root。val);
遍历(根、路径、结果、TargetSum-root。val);
返回结果;
};
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/141438.html