Ich versuche einen binären Baum rekursiv für eine KI zu erstellen, die ich entwickle. Ich versuche, einen Baum zu bauen, aber alles kommt Null zurück. Die Sprache ist Java und ich benutze Eclipse. Außerdem bin ich auf einem Mac, wenn das irgendwas bedeutet. Der Baum sollte als Binärbaum mit instanziierten Knoten ohne Inhalt zurückgegeben werden.Binärer Baum, der Nullen für Knoten zurückgibt
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("-----------------");
}
}
ROOT classs
package FLINCH;
public class Root extends Node {
Node lhs = new Node();
Node rhs = new Node();
}
NODE CLASS
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;
}
}
OUTPUT
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)
Ich hoffe, das hilft ...
nur die Blätter linken und rechten Nachkommen sollte als 'null' gedruckt werden. Teilen Sie Ihre Ausgabe, sowie wie Sie 'Node' und' Root' definiert haben (ich nehme an, 'Root' erweitert' Node', eine Klasse mit 3 Variablen - 'lhs',' rhs' und 'parent'?) –
Was tun du meinst "alles kommt wieder null"? Ihr Algorithmus sieht gut aus, und als ich es versuchte (mit einer geringeren Tiefe als 10), war die Ausgabe, was ich erwartet hatte. Ich empfehle Ihnen, versuchen Sie es mit 10 durch 2 oder 3 ersetzt, dann veröffentlichen Sie die Ausgabe und erklären, was über die Ausgabe ist nicht das, was Sie erwarten. – ajb
ajb: Der Binärbaum wird bis zu einem bestimmten Grad instanziiert. Wenn ich versuche, durchzulaufen, beginne ich bei der Wurzel und gehe dann zur linken und rechten Seite, aber diese Werte sind Null, wenn sie Instanzen von Knoten - Objekten sein sollen, und so weiter den Baum hinunter, bis er die Blätter. Ich habe es mit den Werten 2 bis 10 probiert und bekomme das gleiche Ergebnis –