gpt4 book ai didi

Java:树的创建

转载 作者:行者123 更新时间:2023-12-01 10:47:13 25 4
gpt4 key购买 nike

给定字母表和每个字母的莫尔斯电码值...

a._
b_...
c_._.
d_.. //file to be read in
e.
f.._.

我正在尝试创建一棵树,通过扫描代码找到树中字母的位置,并向左分支寻找点,向右分支寻找破折号。

我创建了一个节点类,其中包含典型的 numberNode leftnumberNode right 变量以及 morseCodeletter.这是我的功能。

aList 是从文件读取的已创建节点的数组列表。 rootNode 是树的根,没有设置lettermorsecode

    public static void createTree(ArrayList<numberNode> aList, numberNode rootNode)
{
for (numberNode n : aList) //for each numberNode in aList
{
int lengthOfCode = n.getmorseCode().length()-1; //get the length of the morsecode
numberNode currentNode = rootNode; //sets currentNode to the rootNode at first
for (int i=0; i<lengthOfCode; i++)
{
char c = n.getmorseCode().charAt(i); //for each char in morsecode until it gets to the end
if (c == '.')
{
if (currentNode.getleft() = null) //if currentnode left is null
{
numberNode newLeftNode = new numberNode(); //create new node
currentNode.setleft(newLeftNode); //set current node left to the new node
if (i == lengthOfCode)
{
currentNode.setleft(n); //if end of morse code, set the current node left's to n
}
else
{
currentNode = newLeftNode; //else change current node to the newly created leftnode
}

}
else //if current node left is not null
{
if (i == lengthOfCode)
{
currentNode.setleft(n); //if at end of morse code
}
currentNode = currentNode.getleft(); //if not at end set current node to current node's left

}

}
if (c == '_')
{
if (currentNode.right() =null)
{
numberNode newRightNode = new numberNode();
currentNode.setleft(newRightNode);
if (i == lengthOfCode)
{
currentNode.setright(n);
}
else
{
currentNode = newRightNode;
}

}
else
{
if (i == lengthOfCode)
{
currentNode.setright(n);
}
currentNode = currentNode.getright();

}

}
}
}
}

我有几个问题...

我的算法至少是正确的吗?

是否有其他方法可以做到这一点而不那么难看?

如果您需要查看更多我的代码,请随时询问。感谢您抽出宝贵的时间,我真的很感激!

编辑:当前正在运行,但是当我尝试使用...打印输出时

       for (numberNode n : nodeArray)
{
System.out.println(n.getletter());
System.out.println(n.getleft().getletter().toString()); //error here
System.out.println(n.getright().getletter());
System.out.println("");
}

我在指示的地方收到错误,对于发生了什么问题有什么想法吗?

最佳答案

首先,当您尝试打印这些值时,编译器所说的错误是 System.out.println(n.getleft().getletter().toString()); 上的错误。//这里有错误吗?

每个字母都应该是它自己的树的根吗?如果假设它在树上,我会在开头有一个引用指针,其中包含对字母表中每个字母的引用,而每个字母的分支节点将具有表示该字母的莫尔斯电码的特定序列。但如果我可以自由地做任何事情,我会简单地创建一个 26 个字符的数组,其中包含一个 MorseCode 对象,该对象有两个字段,一个包含字母,另一个包含与该字母关联的莫尔斯电码。

了解该程序的输出内容并阐明您正在读入 arrayList 的文件中的内容将很有帮助。这些数据是什么样的?

关于Java:树的创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34099373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com