Java 二叉树和botkey troube-无法遍历该树

Java 二叉树和botkey troube-无法遍历该树,java,Java,我正在做一个关于二叉树和植物学密钥的项目,现在我需要做的是将一个机器人密钥加载到程序中,然后工作,通过它进入每个节点,以确定它是什么类型的树,当我到达一个叶子节点时,它将显示树。现在我在移动它的部分时遇到了麻烦,我不知道如何让它工作,我尝试了很多不同的方法,包括预排序遍历,我只是想知道是否有人能帮我把它从地面上弄下来。下面是我需要编辑的程序部分的代码,“chooseOption”方法是用于遍历树的方法。 提前谢谢 /* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */ impo

我正在做一个关于二叉树和植物学密钥的项目,现在我需要做的是将一个机器人密钥加载到程序中,然后工作,通过它进入每个节点,以确定它是什么类型的树,当我到达一个叶子节点时,它将显示树。现在我在移动它的部分时遇到了麻烦,我不知道如何让它工作,我尝试了很多不同的方法,包括预排序遍历,我只是想知道是否有人能帮我把它从地面上弄下来。下面是我需要编辑的程序部分的代码,“chooseOption”方法是用于遍历树的方法。 提前谢谢

/* *要更改此模板,请选择工具|模板 *然后在编辑器中打开模板。 */

import java.io.FileInputStream;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.Scanner;
导入java.util.Stack;
/**
*
*@作者Alex Drinkwater 10077473
*/
公共类BotKey实现IBotKey{
私有节点根;
私有节点currentNode;
//当您实现“撤销”功能时,这个堆栈将派上用场
私有堆栈choiceStack=新堆栈();
@凌驾
公共布尔值已加载(){
返回根!=null;
}
@凌驾
public int getNbrChildren(){
if(currentNode==null){
返回0;
}否则{
返回currentNode.getNbrChildren();
}
}
@凌驾
公共字符串getLeadStatement(int i){
返回currentNode.getChildStatement(i);
}
@凌驾
公共无效选择选项(int i){
//您需要实现这个方法
if(root!=null){
root.getChildNode(i);
root.getChildStatement(i);
}
}
@凌驾
公共选择{
//您需要实现这个方法
}
@凌驾
公共字符串getResults(){
//虚拟实现。您需要提供一个正确的实现
if(currentNode.isLeaf()==true){
currentNode.getName();
}
否则{
字符串s=currentNode+“”;
if(currentNode!=null){
}
}
返回“s”;
}
@凌驾
公共void loadExample1(){
节点southernLive=新节点(“南方活橡树:弗吉尼亚栎”);
Node dwarfLive=新节点(“矮化活橡树:小栎”);
节点柳树=新节点(“柳树橡树”);
节点木瓦=新节点(“木瓦橡木”);
节点21点=新节点(“21点橡木”);
节点northernRed=新节点(“北红橡”);
节点白色=新节点(“白栎白栎”);
节点沼泽栗=新节点(“沼泽栗橡树栎”);
Node node7=新节点();
node7.addChild(白色,“叶具5-9深裂片”);
node7.addChild(沼泽栗,“叶具21-27个浅裂片”);
Node node6=新节点();
node6.addChild(21点,“叶子大多有3个裂片”);
node6.addChild(北红色,“叶多数具7-9裂片”);
Node node5=新节点();
节点5.添加子节点(节点7,
“裂片或牙齿圆形或钝尖,无刚毛”);
node5.addChild(node6,“叶或齿具刚毛尖”);
Node node4=新节点();
亚迪奇尔德(柳树,“叶窄,约为宽的4-6倍”);
(木瓦,“叶宽,约为宽的2-3倍”);
Node node3=新节点();
node3.addChild(矮生植物,一种小灌木);
node3.addChild(southernLive,“成熟的植物是一棵大树”);
Node node2=新节点();
node2.addChild(node4,“叶子不是常绿的”);
node2.addChild(node3,“树叶常青”);
Node node1=新节点();
node1.addChild(node5,“通常有牙齿或裂片的叶子”);
node1.addChild(node2,“通常没有牙齿或裂片的叶”);
根=节点1;
currentNode=root;
}
@凌驾
公共void loadExample2(){
节点southernLive=新节点(“南方活橡树:弗吉尼亚栎”);
Node dwarfLive=新节点(“矮化活橡树:小栎”);
节点柳树=新节点(“柳树橡树”);
节点木瓦=新节点(“木瓦橡木”);
节点21点=新节点(“21点橡木”);
节点northernRed=新节点(“北红橡”);
节点白色=新节点(“白栎白栎”);
节点沼泽栗=新节点(“沼泽栗橡树栎”);
Node node7=新节点();
node7.addChild(白色,“叶具5-9深裂片”);
node7.addChild(沼泽栗,“叶具21-27个浅裂片”);
Node node6=新节点();
node6.addChild(21点,“叶子大多有3个裂片”);
node6.addChild(北红色,“叶多数具7-9裂片”);
Node node5=新节点();
节点5.添加子节点(节点7,
“裂片或牙齿圆形或钝尖,无刚毛”);
node5.addChild(node6,“叶或齿具刚毛尖”);
Node node4=新节点();
亚迪奇尔德(柳树,“叶窄,约为宽的4-6倍”);
(木瓦,“叶宽,约为宽的2-3倍”);
Node node3=新节点();
node3.addChild(矮生植物,一种小灌木);
node3.addChild(southernLive,“成熟的植物是一棵大树”);
Node node2=新节点();
node2.addChild(node4,“叶子不是常绿的”);
node2.addChild(node3,“树叶常青”);
Node node1=新节点();
node1.addChild(node5,“通常有牙齿或裂片的叶子”);
node1.addChild(node2,“通常没有牙齿或裂片的叶”);
根=节点1;
currentNode=root;
//您需要实现这个方法
}
@凌驾
public void readFromFile(FileInputStream fs){
//您需要实现这个方法
//您可能会发现这样的hashmap很有用
HashMap=newHashMap();
}
@凌驾
公共布尔canUndo(){
//虚拟实现。您需要提供一个适当的实现
if(choiceStack!=null){
返回true;
}否则{
返回false;
}
}
}
你有一个植物学“数据库”(树结构),描述每种植物,例如:“柳树橡树”?那你想你
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Stack;

/**
*
* @author Alex Drinkwater 10077473
*/
public class BotKey implements IBotKey {

private Node root;
private Node currentNode;
// This stack will come in handy when you implement the "undo" facility
private Stack<Node> choiceStack = new Stack<Node>();

@Override
public boolean isLoaded() {
    return root != null;
}

@Override
public int getNbrChildren() {
    if (currentNode == null) {
        return 0;
    } else {
        return currentNode.getNbrChildren();
    }
}

@Override
public String getLeadStatement(int i) {
    return currentNode.getChildStatement(i);
}

@Override
public void chooseOption(int i) {
    //You need to implement this method

    if (root != null) {
        root.getChildNode(i);
        root.getChildStatement(i);

    }


}

@Override
public void undoChoice() {
    //You need to implement this method
}

@Override
public String getResults() {
    //Dummy implementation. You need to supply a proper one
    if (currentNode.isLeaf() == true) {
        currentNode.getName();
    }
    else{
        String s =currentNode + "";
        if(currentNode!= null){
        }
    }
    return "s";

}


   @Override
   public void loadExample1() {
    Node southernLive = new Node("Southern live Oak: Quercus virginiana");
    Node dwarfLive = new Node("Dwarf live oak: Quercus minima");
    Node willow = new Node("Willow oak");
    Node shingle = new Node("Shingle oak");
    Node blackJack = new Node("Blackjack Oak");
    Node northernRed = new Node("Northern red oak");
    Node white = new Node("White oak Quercus alba");
    Node swampChestnut = new Node("Swamp chestnut oak Quercus prinus");


    Node node7 = new Node();
    node7.addChild(white, "Leaves with 5-9 deep lobes");
    node7.addChild(swampChestnut, "Leaves with 21-27 shallow lobes");

    Node node6 = new Node();
    node6.addChild(blackJack, "Leaves mostly with 3 lobes");
    node6.addChild(northernRed, "Leaves mostly with 7-9 lobes");

    Node node5 = new Node();
    node5.addChild(node7,
            "Lobes or teeth rounded or blunt-pointed, no bristles");
    node5.addChild(node6, "Lobes or teeth bristle-tipped");

    Node node4 = new Node();
    node4.addChild(willow, "Leaf narrow, about 4-6 times as long as broad");
    node4.addChild(shingle, "Leaf broad, about 2-3 times as long as broad");

    Node node3 = new Node();
    node3.addChild(dwarfLive, "Mature plant a small shrub");
    node3.addChild(southernLive, "Mature plant a large tree");

    Node node2 = new Node();
    node2.addChild(node4, "Leaves not evergreen");
    node2.addChild(node3, "Leaves evergreen");

    Node node1 = new Node();
    node1.addChild(node5, "Leaves usually with teeth or lobes");
    node1.addChild(node2, "Leaves usually without teeth or lobes");


    root = node1;
    currentNode = root;
}

@Override
public void loadExample2() {
    Node southernLive = new Node("Southern live Oak: Quercus virginiana");
    Node dwarfLive = new Node("Dwarf live oak: Quercus minima");
    Node willow = new Node("Willow oak");
    Node shingle = new Node("Shingle oak");
    Node blackJack = new Node("Blackjack Oak");
    Node northernRed = new Node("Northern red oak");
    Node white = new Node("White oak Quercus alba");
    Node swampChestnut = new Node("Swamp chestnut oak Quercus prinus");


    Node node7 = new Node();
    node7.addChild(white, "Leaves with 5-9 deep lobes");
    node7.addChild(swampChestnut, "Leaves with 21-27 shallow lobes");

    Node node6 = new Node();
    node6.addChild(blackJack, "Leaves mostly with 3 lobes");
    node6.addChild(northernRed, "Leaves mostly with 7-9 lobes");

    Node node5 = new Node();
    node5.addChild(node7,
            "Lobes or teeth rounded or blunt-pointed, no bristles");
    node5.addChild(node6, "Lobes or teeth bristle-tipped");

    Node node4 = new Node();
    node4.addChild(willow, "Leaf narrow, about 4-6 times as long as broad");
    node4.addChild(shingle, "Leaf broad, about 2-3 times as long as broad");

    Node node3 = new Node();
    node3.addChild(dwarfLive, "Mature plant a small shrub");
    node3.addChild(southernLive, "Mature plant a large tree");

    Node node2 = new Node();
    node2.addChild(node4, "Leaves not evergreen");
    node2.addChild(node3, "Leaves evergreen");

    Node node1 = new Node();
    node1.addChild(node5, "Leaves usually with teeth or lobes");
    node1.addChild(node2, "Leaves usually without teeth or lobes");


    root = node1;
    currentNode = root;

    //You need to implement this method
}

@Override
public void readFromFile(FileInputStream fs) {
    //You need to implement this method

    // You may find that a hashmap like this is useful
    HashMap<Integer, Node> map = new HashMap<Integer, Node>();
}

@Override
public boolean canUndo() {
    //Dummy implementation. You need to provide a proper one
    if (choiceStack != null) {
        return true;
    } else {
        return false;
    }
}
}