时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M 热度指数:692806
本题知识点: 树
题目描述
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
示例1
输入
{10,5,12,4,7},22
返回值
[[10,5,7],[10,12]]
示例2
输入
{10,5,12,4,7},15
返回值
[]
思路:
用一个递归函数进行深度遍历(先序),然后通过逐渐减去期望值,直到为0,该路径为可取路径,保存到结果数组中。
注意:
判断成立的条件有两点,1.达到期望值,2.叶子节点
function FindPath(root, expectNumber){
let res = [],path = [];
if(!root) return []
dfs(root,expectNumber)
return res;
function dfs(root,expectNumber){
path.push(root.val)
expectNumber -= root.val
//1.达到期望值,2.叶子节点
if(!expectNumber && !root.left && !root.right){
//必须path.slice(),因为path一直变化,最后为[]
res.push(path.slice())
}else{
if(root.left)dfs(root.left,expectNumber)
if(root.right)dfs(root.right,expectNumber)
}
//弹出最后一项不符合要求的元素
path.pop()
}
}
答案参考自:小松在努力!