Description
面试题34. 二叉树中和为某一值的路径
难度:中等
输入一棵二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。从树的根节点开始往下一直到叶节点所经过的节点形成一条路径。
示例:给定如下二叉树,以及目标和 sum = 22
5/ \4 8/ / \11 13 4/ \ / \7 2 5 1
返回:
[[5,4,11,2],[5,8,4,5]]
提示:
节点总数 <= 10000
解答:
前序遍历的思路
维护一个 sum(路径的和),每次遍历将当前节点的值
class Solution {List<List<Integer>> paths;List<Integer> temp;int sum;public List<List<Integer>> pathSum(TreeNode root, int sum) {paths = new ArrayList<>();temp = new ArrayList<>();this.sum = sum;preOrder(root, 0);return paths;}public void preOrder(TreeNode node, int sum){if(node == null)return;// 计算和sum += node.val;temp.add(node.val);// 如果 sum 等于指定的值,且当前节点为叶子节点时if(sum == this.sum && node.right == null && node.left == null){paths.add(temp);temp = new ArrayList<>(temp);}preOrder(node.left, sum);preOrder(node.right, sum);temp.remove(temp.size()-1); // 返回上一节点时,删除 list 中当前节点的值}}
