二叉树中和为某一值的路径
题目描述:
输入一颗二叉树的根节点和一个整数,按字典序打印出二叉树中结点值的和为输入整数的所有路径。
路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。
问题分析:
大概的思想就是:二叉树的遍历(递归)+动态规划(push,pop数据)
每次遍历的时候先将数字的值放入数组,计算数字的值是否满足条件(等于给出的num),同时当数字满足条件时是否还有多余节点,
如果有,则已有路径无效,将数组中数字弹出;如果没有,则已有路径有效,将数组的值放入最终数组,然后将数组中数字弹出
代码展示:
/* function TreeNode(x) {
this.val = x;
this.left = null;
this.right = null;
} */
var res;//声明
var tmp;
function FindPath(root, expectNumber)
{
res = [];//最终结果
tmp = [];//暂存满足条件的路径
if(!root)
return res;
find_path(root,expectNumber);
return res;
}
function find_path(root,num){
tmp.push(root.val);//将数据放入暂存数组
if(root.val === num && root.left===null && root.right===null)
res.push(tmp.slice());//将满足条件的列表存进最终结果列表,这里要用slice返回一个新数组
else{
if(root.left !== null) //左节点
find_path(root.left,num-root.val);//每次往下遍历时,都将之前的值放入数组,同时减去这个值
if(root.right !== null) //右节点
find_path(root.right,num-root.val);
}
tmp.pop();//将数据弹出
}