右ノードを左ノードに追加する際に問題が発生しているようです。 私はここで予約注文予約注文トラバーサルツリー
Fred 1900
2
John 1925
3
Mary 1950
2
Jason 1972
0
Heather 1975
2
Sydney 2002
0
Hailey 2005
0
John 1951
1
Amy 1983
0
Fred 1953
3
Mark 1977
0
Sarah 1979
1
Michael 2005
0
Adam 1982
0
Joan 1927
2
Susan 1949
0
David 1952
1
Fred 1980
0
にリストされている入力ファイル(.txt)を持っているが、私のNodeクラスです:
public class Node {
public String name;
public int year;
//this will help with determining the parent in the insertion process
public int children;
public Node parent;
public Node left;
public Node right;
public Node(String name, int year, int children){
this.name = name;
this.year = year;
this.children = children;
}
}
私のノードが正常に作成されていると仮定すると、私が持っているように見えます実際のツリーを作成する問題。
public class FamilyTree {
public Node familyTree;
private Node pivotalNode;
private Node parent;
private int children = 0;
//This method adds a family member to the family tree
public void add(Node newNode){
familyTree = add(familyTree,newNode);
}
private Node add(Node familyTree, Node newNode){
if(familyTree == null){
children = newNode.children;
newNode.parent = parent;
familyTree = newNode;
}
else if(children > 0){
parent = familyTree;
familyTree.left = add(familyTree.left, newNode);
pivotalNode = familyTree.left;
}
else if(children == 0){
familyTree.right = add(familyTree.right, newNode);
return pivotalNode;
}
return familyTree;
}
}
結果は次のようにツリーを表示するには、次のとおりです。
public class Operations {
//Not necessary but it helps me to get more organized. Just want to extract information first.
public static ArrayList<String> information = new ArrayList<String>();
public static void main(String args[]){
//extract information from file
getFileContents();
//Object initialization
FamilyTree family = new FamilyTree();
//some useful variables for loop below
int children =0;
String[] splitted = null;
Node member = null;
for(int i=0; i<information.size(); i++){
//Every other line in the text file perform a different operation
if(i % 2 == 1){
try{
children = Integer.parseInt(information.get(i));
member = new Node(splitted[0], Integer.parseInt(splitted[1]), children);
family.add(member);
}
catch(Exception e){
//this determines if the pattern is broken
break;
}
}
if(i % 2 == 0){
splitted = information.get(i).split("\\s+");
//this determines a pattern difference
if(splitted.length < 2){
break;
}
}
}
System.out.print("hi");
}
//Pretty self explanatory. Read each line of the file and store it into an array.
//Not necessary as everything could technically be done at once (insertion), but this keeps me
//more organized to put everything together later on
public static void getFileContents(){
try{
BufferedReader br = new BufferedReader(new FileReader("includes\\assn2in.txt"));
String line;
String info;
while ((line = br.readLine()) != null) {
info = line.replaceAll("\\s+", " ");
information.add(info);
}
br.close();
}
catch(IOException e){
System.out.println("Error: "+e);
}
}
}
は、ここに私の主な方法です。つまり、それは子供たちを表現するためにleft
とright
メンバーが含まれています - - あなたが持っている