package org.example.interview.practice;
import java.util.ArrayList;
/**
* @author xianzhe.ma
* @date 2021/8/30
*/
public class NC_45_THREE_ORDERS {
public static int[][] threeOrders(TreeNode root) {
// write code here
ArrayList<TreeNode> list1 = new ArrayList<>();
ArrayList<TreeNode> list2 = new ArrayList<>();
ArrayList<TreeNode> list3 = new ArrayList<>();
preOrder(root, list1);
midOrder(root, list2);
postOrder(root, list3);
int[][] ret = new int[3][list1.size()];
int[] pre = new int[list1.size()];
int[] mid = new int[list1.size()];
int[] post = new int[list1.size()];
int index = 0;
for (TreeNode node : list1) {
pre[index++] = node.val;
}
index = 0;
for (TreeNode node : list2) {
mid[index++] = node.val;
}
index = 0;
for (TreeNode node : list3) {
post[index++] = node.val;
}
// System.arraycopy();
for (int j = 0; j < list1.size(); j++) {
ret[0][j] = pre[j];
}
for (int j = 0; j < list1.size(); j++) {
ret[1][j] = mid[j];
}
for (int j = 0; j < list1.size(); j++) {
ret[2][j] = post[j];
}
return ret;
}
private static ArrayList<TreeNode> preOrder(TreeNode root, ArrayList<TreeNode> list) {
if (root == null) {
return list;
}
list.add(root);
preOrder(root.left, list);
preOrder(root.right, list);
return list;
}
private static ArrayList midOrder(TreeNode root, ArrayList list) {
if (root == null) {
return list;
}
midOrder(root.left, list);
list.add(root);
midOrder(root.right, list);
return list;
}
private static ArrayList postOrder(TreeNode root, ArrayList list) {
if (root == null) {
return list;
}
postOrder(root.left, list);
postOrder(root.right, list);
list.add(root);
return list;
}
public static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
node1.left = node2;
node1.right = node3;
threeOrders(node1);
}
}
package org.example.interview.practice;
/**
* @author xianzhe.ma
* @date 2021/11/6
*/
import java.util.*;
public class NC_46_TARGET_VALUE {
public static ArrayList<ArrayList<Integer>> combinationSum2(int[] num, int target) {
ArrayList<ArrayList<Integer>> res = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> arr = new ArrayList<Integer>();
if (num == null || num.length == 0 || target < 0) return res;
Arrays.sort(num);//对候选数组进行排序 方便后续处理
dfs(num, target, res, arr, 0);
return res;
}
public static void dfs(int[] num, int target, ArrayList<ArrayList<Integer>> res, ArrayList<Integer> arr, int start) {
if (target == 0) {
//已找到一组 存储进res
res.add(new ArrayList<Integer>(arr));
return;
}
if (start >= num.length) return;
for (int i = start; i < num.length; i++) {
if (i > start && num[i] == num[i - 1])
continue;
//回溯操作
if (num[i] <= target) {
arr.add(num[i]);
dfs(num, target - num[i], res, arr, i + 1);
arr.remove(arr.size() - 1);
}
}
return;
}
public static void main(String[] args) {
int[] array = {2, 3};
combinationSum2(array, 5);
}
}