- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何确定字母的摩尔斯电码表示形式?
“E”=“。”“T”=“-”
为什么不是字母?如 let "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
进行递归调用并附加破折号 (-)。
就个人而言,我会从此方法返回一个字符串。该字符串将是迄今为止该字母的莫尔斯电码,如果未找到该字母,则该字符串为空。当您从正确的树遍历返回时,构建正确的字符串(您现在用于 res 的字符串)。
需要测试的是,您可能必须连接到字符串的前面而不是字符串的后面才能使结果正确。
这棵树的真正用处在于解码莫尔斯电码,将点划线字符串转换为其正确的字母。这变成了一个简单的树遍历。
关于java - 摩尔斯电码 - 二叉树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445853/
我是一名优秀的程序员,十分优秀!