如何确定字母的摩尔斯电码表示形式?
“ 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的字符串)。
要测试的是,您可能必须在字符串的前面而不是在字符串的后面进行合并,以使事情变得正确。
这棵树的真正用途是解码摩尔斯电码,将点破折号字符串转换为正确的字母。这成为一个简单的树遍历。