首页 > 代码库 > 打印二叉树节点数值总和等于某个给定节点的所有路径

打印二叉树节点数值总和等于某个给定节点的所有路径

打印二叉树节点数值总和等于某个给定节点的所有路径,路径可以从任意节点开始,任意节点结束。

比如,假设和是8,树如下 的路径有  [[5,3],[8],[5,1,2]]。

    5

   / \

    3     1

   /\     /\

 4  8  2   6

思路:遍历所有路径,对于每一个节点,在其路径中向后寻找sum和为target的路径加入到结果中。

public List<List<Integer>> findSum(TreeNode root,int sum){    List<List<Integer>> res = new ArrayList<List<Integer>>();    List<Integer> tmp = new ArrayList<Integer>();    find(res,tmp,root,sum);    return res;}private void find(List<List<Integer>> res, List<Integer> tmp, TreeNode root, int sum){    if(root==null)        return;            tmp.add(root.val);        //for each node    int tmpSum=0;    for(int i=tmp.size()-1;i>=0;i--){        tmpSum+=tmp.get(i);        if(tmpSum==sum){            res.add(i,tmp);           }                }            find(res,tmp,root.left,sum);    find(res,tmp,root.right,sum);    tmp.remove(tmp.size()-1);    }

 

打印二叉树节点数值总和等于某个给定节点的所有路径