题目
代码
深度优先:
class Solution {
List<List<Integer>> ret = new LinkedList<List<Integer>>();
Deque<Integer> path = new LinkedList<Integer>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
dfs(root, targetSum);
return ret;
}
private void dfs(TreeNode root, int targetSum) {
if (root == null) return;
path.offerLast(root.val);
targetSum -= root.val;
if (root.left == null && root.right == null && targetSum == 0) {
ret.add(new LinkedList<Integer>(path));
}
dfs(root.left, targetSum);
dfs(root.right, targetSum);
path.pollLast();
}
}
广度优先:
class Solution {
List<List<Integer>> ret = new LinkedList<List<Integer>>();
Map<TreeNode, TreeNode> map = new HashMap<TreeNode, TreeNode>();
public List<List<Integer>> pathSum(TreeNode root, int targetSum) {
if (root == null) {
return ret;
}
Queue<TreeNode> ququeNode = new LinkedList<TreeNode>();
Queue<Integer> ququeSum = new LinkedList<Integer>();
ququeNode.offer(root);
ququeSum.offer(0);
while (!ququeNode.isEmpty()) {
TreeNode node = ququeNode.poll();
int rec = ququeSum.poll() + node.val;
if (node.left == null && node.right == null) {
if (rec == targetSum) {
getPath(node);
}
} else {
if (node.left != null) {
map.put(node.left, node);
ququeNode.offer(node.left);
ququeSum.offer(rec);
}
if (node.right != null) {
map.put(node.right, node);
ququeNode.offer(node.right);
ququeSum.offer(rec);
}
}
}
return ret;
}
private void getPath(TreeNode node) {
List<Integer> temp = new LinkedList<Integer>();
while (node != null) {
temp.add(node.val);
node = map.get(node);
}
Collections.reverse(temp);
// ret.add(new LinkedList<Integer>(temp));
ret.add(temp);
}
}