// 路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)
//1. dfs + 回溯
//2. 深度搜索路径,将路径中的每个节点值相加,路径存入缓存,直到遍历到最深处
//3. 比较当前值是否为目标值,如果是将缓存的路径加入结果数组,如果不是则回退到上一个节点
function dfs(root,expectNumber,cur,path,result) {
cur += root.val;
path.push(root);
if(cur === expectNumber && root.left === null && root.right === null){
result.push(path.slice(0));
}
root.left && dfs(root.left,expectNumber,cur,path,result);
root.right && dfs(root.right,expectNumber,cur,path,result);
//重要
path.pop();
}
function FindPath(root, expectNumber)
{
let result = [],path = [],cur = 0;
if(!root) return result;
dfs(root,expectNumber,cur,path,result);
return result;
}