剑指 Offer 34. 二叉树中和为某一值的路径
题目:
思路:
1.每次不对都要回到上一个节点?——使用stack保存,因为要遍历,所以使用Deque
2.Queue保存TreeNode,不对,removeLast
3.属于回溯法
题解
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> pathSum(TreeNode root, int target) {
List<List<Integer>> list = new ArrayList<>();
// 因为中间有遍历,所以使用双端队列来代替stack
Deque<TreeNode> lista = new LinkedList<>();
int sum = 0;
rescure(list, lista, sum, target, root);
return list;
}
private void rescure(List<List<Integer>> list, Deque<TreeNode> lista, int sum, int target, TreeNode root) {
if (root == null) {
return;
}
sum += root.val;
lista.addLast(root);
if (root.left == null && root.right == null && sum == target) {
List<Integer> list1 = new ArrayList<>();
for (TreeNode node : lista) {
list1.add(node.val);
}
list.add(list1);
}
if (root.left != null) {
rescure(list, lista, sum, target, root.left);
}
if (root.right != null) {
rescure(list, lista, sum, target, root.right);
}
lista.removeLast();
}
}