Я пытаюсь построить двоичное дерево рекурсивно для ИИ, который я разрабатываю. Я пытаюсь построить дерево, но все возвращается null. Язык Java, и я использую Eclipse. Кроме того, я нахожусь на Mac, если это что-то значит. Дерево должно быть возвращено как двоичное дерево с созданными узлами, но без какого-либо контента.Двоичное дерево, возвращающее нули для узлов
public class DecisionTree {
//build a generic, empty, tree
//building binary
Root r = new Root();
public void build() //ok
{
Node lhs = new Node();
Node rhs = new Node();
lhs = new Node();
rhs = new Node();
r.lhs = lhs;
r.rhs = rhs;
lhs.parent = r;
rhs.parent = r;
builtRecursion(lhs, 1);
builtRecursion(rhs, 1);
outputTree();
int ctr = 1; //levels of tree
}
public int builtRecursion(Node n, int ctr)
{
Node lhs = new Node();
Node rhs = new Node();
ctr++;
System.out.println("built recursion ctr is " + ctr);
if (ctr > 10)
{
//leaf node
Behaviors behavior = new Behaviors();
Node node = behavior;
n.b = behavior;
return 0;
}
n.lhs = lhs;
n.rhs = rhs;
lhs.parent = n;
rhs.parent = n;
builtRecursion(lhs, ctr);
builtRecursion(rhs, ctr);
return ctr;
}
public void outputTree()
{
if (r != null)
{
System.out.println("Root");
}
outputTreeRecursive(r);
}
public void outputTreeRecursive(Node n)
{
if (n.lhs != null)
{
System.out.println("------------------");
System.out.println("LHS");
outputTreeRecursive(n.lhs);
}
else { System.out.println("LHS is null");}
if (n.rhs != null)
{
System.out.println("-----------------");
System.out.println("RHS");
outputTreeRecursive(n.rhs);
}
else { System.out.println("RHS is null");}
System.out.println("-----------------");
}
}
КОРНЕВАЯ CLASSS
package FLINCH;
public class Root extends Node {
Node lhs = new Node();
Node rhs = new Node();
}
УЗЕЛ КЛАСС
package FLINCH;
import java.util.ArrayList;
import java.util.LinkedList;
public class Node {
Node lhs = null;
Node rhs = null;
Node parent = null;
Decider d = new Decider(this);
Behaviors b = null;
public LinkedList getSuccessors()
{
LinkedList list = new LinkedList();
list.add(lhs);
list.add(rhs);
return list;
}
}
ВЫХОД
GetAction Running
Iterating through open list
Size of open list is 1
Peeked openLIst size is 1
Peeking throguh open list
Popping Open List
LHS is null
RHS is null
Number of children is 2
Children equals 2
Decider childrens loop
Child node is null
Iterating through children
Exception in thread "main" java.lang.NullPointerException
at FLINCH.A_Star_Search.search3(A_Star_Search.java:81)
at FLINCH.Soldier.search_behavior(Soldier.java:28)
at FLINCH.Main.getAction(Main.java:54)
at tests.GameVisualSimulationTest.main(GameVisualSimulationTest.java:52)
Я надеюсь, что это помогает ...
только левый и правый потомки листьев должен быть напечатан как 'null'. Поделитесь своим результатом, а также тем, как вы определили 'Node' и' Root' (я предполагаю, что 'Root' расширяет' Node', класс с 3 переменными - 'lhs',' rhs' и 'parent'?) –
Что делать вы имеете в виду «все возвращается нулевым»? Ваш алгоритм выглядит отлично, и когда я попробовал (с меньшей глубиной, чем 10), выход был тем, что я ожидал. Я рекомендую вам попробовать его с заменой 10 на 2 или 3, а затем опубликовать вывод и объяснить, что о выходе не то, что вы ожидаете. – ajb
ajb: двоичное дерево создается до определенного уровня. Когда я пытаюсь пройти через него, я начинаю с корня, а затем перехожу в левую и правую стороны, но эти значения равны нулю, когда они должны быть экземплярами объектов узла и т. Д. Вниз по дереву, пока не достигнут листья. Я пробовал его со значениями от 2 до 10, и получаю тот же результат. –