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