Gelişmekte olduğum bir AI için yinelemeli bir ikili ağaç oluşturmaya çalışıyorum. Bir ağaç oluşturmaya çalışıyorum ama her şey geri geliyor. Dil Java ve Eclipse kullanıyorum. Ayrıca, ben bir Mac’e gidiyorum, eğer bir şey ifade ederse. Ağaç, herhangi bir içerik olmaksızın örneklenen düğümlerle birlikte bir ikili ağaç olarak döndürülmelidir. İkili Ağacı düğümler için sıfır döndürüyor
KÖK çerçevesinde en
package FLINCH;
public class Root extends Node {
Node lhs = new Node();
Node rhs = new Node();
}
DÜĞÜM SINIF
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;
}
}
ÇIKIŞ
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)
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("-----------------");
}
}
Umarım bu yardımcı olur...
hakkında daha iyi bir fikir olsun. Çıktınızı, yanı sıra 'Düğüm' ve 'Kök' tanımladığınız gibi (Root'un 'Node', 3 değişkenli bir sınıf - 'lhs', 'rhs' ve 'ana' olduğunu varsayalım?) –
Ne yaparsınız? "her şey geri döndü" demek istiyorsun? Algoritmanız iyi görünüyor ve denediğimde (10'dan küçük bir derinlikle) çıktı beklediğim şeydi. 10 veya 2 yerine 3 ile denemenizi tavsiye ederim, sonra çıktıyı yayınlayın ve çıktı hakkında ne beklediğinizi açıklayın. – ajb
ajb: ikili ağaç belirli bir düzeye kadar başlatılır. Bu adımı atmaya çalıştığımda, kökten başlayıp sol tarafa ve sağ tarafa geçiyorum, ancak bu değerler nodur, bunlar Node nesnelerinin örneklerinin olması gerektiğinde ve böylece ağaçlara doğru olana kadar yapraklar. Ben iki ile 10 değerleri denedim ve aynı sonucu elde ediyorum –