如何确定字母的摩尔斯电码表示形式?

“ E” =“。
“ T” =“-”

为什么不按字母顺序?如在让“ A” =“。”,“ B” =“-”,“ C” =“ .-”等中。

我正在尝试为遍历这些字母的二叉树开发一种算法。

我的主要目的是搜索一个字母,例如“ A”,但我不知道使用什么条件来确定何时分支到右节点或左节点。

编辑

这就是我试图做的。在这里,我试图跟踪路径。但是,当我用“ E”之类的字母来尝试时,它说根是空的。

static boolean treeContains( Node root, String item ) {
     // Return true if item is one of the items in the binary
         // sort tree to which node points.   Return false if not.
     if ( root == null ) {
           // Tree is empty, so it certainly doesn't contain item.
         System.out.print("Is null");
        return false;
     }
     else if ( item.equals(root.element) ) {
           // Yes, the item has been found in the root node.
        return true;
     }
     else if ( item.compareTo(root.element) < 0 ) {
           // If the item occurs, it must be in the left subtree.
           // So, return the result of searching the left subtree.
        res = res.concat(".");
        return treeContains( root.right, item );
     }
     else {
           // If the item occurs, it must be in the right subtree.
           // So, return the result of searching the right subtree.
        res = res.concat("-");
        return treeContains( root.left, item );
     }
  }  // end treeContains()

最佳答案

如果您有一个带有字母的二叉树,则让左为点(。),右为破折号(-)。遍历树时,通过跟踪路径,您知道每个字母的二进制代码是什么。

编辑

查看您的代码,您没有正确遍历树。首先,我不确定变量res是什么,但是我敢打赌它是静态的,这不是很好的编码习惯。

真正的问题是,比较item.compareTo(root.element) < 0对该树不是有效的比较。相反,您应该使用递归调用作为测试treeContains( root.right, item )。仅当返回true时,才可以将点(。)附加到res字符串中。如果返回false,则可以使用root.left进行递归调用,并附加一个破折号(-)。

就个人而言,我将从该方法返回一个字符串。该字符串将是到目前为止该字母的莫尔斯电码,如果未找到该字母,则为null。当您从正确的树遍历返回时,构建正确的字符串(当前用于res的字符串)。

要测试的是,您可能必须在字符串的前面而不是在字符串的后面进行合并,以使事情变得正确。

这棵树的真正用途是解码摩尔斯电码,将点破折号字符串转换为正确的字母。这成为一个简单的树遍历。

09-13 01:32