莫尔斯电码如何确定一封信?
“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()
答案 0 :(得分:2)
如果你的二进制树中有字母,那么左边是一个点(。),右边是一个短划线( - )。当您遍历树时,通过跟踪路径,您就知道每个字母的二进制代码是什么。
修改
查看代码,您没有正确遍历树。首先,我不确定变量res
是什么,但我认为它是静态的,这不是很好的编码实践。
您真正的问题是您的比较item.compareTo(root.element) < 0
不是此树的有效比较。相反,您应该使用递归调用作为测试treeContains( root.right, item )
。只有当这返回true时,才能将点(。)附加到res
字符串。如果返回false,则可以使用root.left
进行递归调用并附加短划线( - )。
就个人而言,我会从这个方法返回一个字符串。该字符串将是到目前为止该字母的莫尔斯代码,如果找不到该字母,则为null。当您从正确的树遍历返回时,建立正确的字符串(您现在使用的是res)。
要测试的是你可能必须连接到字符串的前面而不是字符串的后面才能使事情变得正确。
这棵树真正有用的是解码摩尔斯电码,将点划线字符串转换为正确的字母。这变成了一个简单的树遍历。