Java:树创建

时间:2015-12-04 23:46:30

标签: java object if-statement for-loop tree

给出每个字母的字母和莫尔斯码值......

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

我正在尝试创建一个树,通过扫描代码找到树中一个字母的位置,然后向左分支以获得一个点,并将其分支为一个短划线。

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

aList是从文件读入的已创建节点的arraylist。 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("");
    }

我指出错误,有什么问题的想法?

1 个答案:

答案 0 :(得分:1)

首先,当你尝试打印出值时,编译器说的是System.out.println(n.getleft()。getletter()。toString())上的错误。 //错误在这里?

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

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