package org.example.test;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import java.awt.*;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
public class DFSTest {
static ArrayList<Boolean> vis = new ArrayList<>();
public static void main(String[] args) {
TreeNode node1 = new TreeNode(5);
TreeNode node2 = new TreeNode(4);
TreeNode node3 = new TreeNode(8);
node1.left = node2;
node1.right = node3;
TreeNode node4 = new TreeNode(1);
TreeNode node5 = new TreeNode(11);
node2.left = node4;
node2.right = node5;
TreeNode node6 = new TreeNode(9);
node3.right = node6;
TreeNode node7 = new TreeNode(2);
TreeNode node8 = new TreeNode(7);
node5.left = node7;
node5.right = node8;
System.out.println(JSONObject.toJSONString(pathSum(node1, 22)));
}
public static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static ArrayList<ArrayList<Integer>> pathSum(TreeNode root, int sum) {
// write code here
ArrayList<ArrayList<Integer>> ret = new ArrayList<>();
if (root == null) {
return ret;
}
LinkedList<Integer> path = new LinkedList<>();
path.add(root.val);
getPath(root, ret, path, sum - root.val);
return ret;
}
private static void getPath(TreeNode root, ArrayList<ArrayList<Integer>> ret, LinkedList<Integer> path, int sum) {
if (root.left == null && root.right == null) {
System.out.println(root.val);
if (sum == 0) {
ret.add(new ArrayList<>(path));
}
return;
}
if (root.left != null) {
path.add(root.left.val);
getPath(root.left, ret, path, sum - root.left.val);
path.removeLast();
}
if (root.right != null) {
path.add(root.right.val);
getPath(root.right, ret, path, sum - root.right.val);
path.removeLast();
}
}
public static void dfs(TreeNode root, ArrayList<ArrayList<Integer>> ret, LinkedList<Integer> path, int target) {
if (root == null) {
return;
}
path.add(root.val);
target -= root.val;
if (root.left == null && root.right == null && target == 0) {
ret.add(new ArrayList<>(path));
}
dfs(root.left, ret, path, target);
dfs(root.right, ret, path, target);
path.removeLast();
}
}