如何实现“二叉树结构”?
结果应为:
如果字段包含“true”,则两个列表都应添加此元素。如果该字段包含“false”,则只有正确的列表才应添加此元素。我认为没有递归函数,这个方法是不可实现的。
public class Test {
static List<String> fields = new ArrayList<>();
static List<Fieldmatrix> list = new ArrayList<>();
public static void main(String[] args) {
fields.add("1 : true");
fields.add("2 : false");
fields.add("3 : false");
permute(new ArrayList<>(),new ArrayList<>(), 0 , fields);
}
}
方法:
public static List<List<String>> permute(List<String> fieldsRight, List<String> fieldsLeft, int start, List<String> fields){
List<List<String>> combinations = new ArrayList<>();
if (start >= fields.size()) {
combinations.add(fieldsRight);
combinations.add(fieldsLeft);
return combinations;
}
List<String> tmpRight = new ArrayList<>();
List<String> tmpLeft = new ArrayList<>();
if (fields.get(start).contains("false")){
fieldsRight.add(fields.get(start));
tmpRight = new ArrayList<>(fieldsRight);
tmpLeft = new ArrayList<>(fieldsLeft);
combinations.addAll(permute(fieldsRight, fieldsLeft, start+1, fields));
}
else{
fieldsRight.add(fields.get(start));
fieldsLeft.add(fields.get(start));
tmpRight = new ArrayList<>(fieldsRight);
tmpLeft = new ArrayList<>(fieldsLeft);
combinations.addAll(permute(fieldsRight, fieldsLeft, start+1, fields));
}
return combinations;
}
我的错误在哪里? 我该如何解决这个问题?
答案 0 :(得分:1)
我理解你的图表的方式,每个节点都有一个数据字段,它是一个布尔列表,以及一个对其他节点的左和右引用:
class Node {
Map<Integer,Boolean> data;
Node left;
Node right;
};
更新
public class Tree {
private List<Boolean> list;
private Node left;
private Node right;
private static class Node {
List<Integer> list;
private Node left;
private Node right;
Node(List<Boolean> treeList, List<Integer> list, int start) {
this.list = list;
if (start < treeList.size()) {
List<Integer> leftList = new ArrayList<>(list);
List<Integer> rightList = new ArrayList<>(list);
rightList.add(start+1);
if (treeList.get(start)) {
leftList.add(start+1);
}
left = new Node(treeList, leftList, start+1);
right = new Node(treeList, rightList, start+1);
}
}
void print(int indent) {
for (int i = 0; i < indent; ++i) {
System.out.print(" ");
}
System.out.println(list);
if (left != null) {
left.print(indent+1);
}
if (right != null) {
right.print(indent+1);
}
}
}
public Tree(List<Boolean> list) {
this.list = new ArrayList<>(list);
if (!list.isEmpty()) {
List<Integer> leftList = new ArrayList<>();
List<Integer> rightList = new ArrayList<>();
rightList.add(1);
if (list.get(0)) {
leftList.add(1);
}
left = new Node(list, leftList, 1);
right = new Node(list, rightList, 1);
}
}
public void print() {
System.out.println(list);
if (left != null) {
left.print(1);
}
if (right != null) {
right.print(1);
}
}
}
构建树:
Tree tree = new Tree(Arrays.asList(true, false, false));
tree.print();
更新2:输出
[true, false, false]
[1]
[1]
[1]
[1, 3]
[1, 2]
[1, 2]
[1, 2, 3]
[1]
[1]
[1]
[1, 3]
[1, 2]
[1, 2]
[1, 2, 3]