用Java语言建立二叉树,并实现二叉树的先根、中根、后根遍历。并在此基础上,实现树与二叉树的相互转换。 实现一个简单的哈夫曼编码/译码器,能根据一段用户输入的英文语句设计赫夫曼编码,并能用该编码对一段给定的电文进行译码。
时间: 2024-12-23 18:12:40 浏览: 16
在Java中,我们可以使用节点类来构建二叉树的基本结构,每个节点包含一个值和两个指向左右子节点的引用。以下是创建二叉树以及进行各种遍历的基础实现:
```java
// 定义二叉树节点类
class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) {
this.val = val;
left = null;
right = null;
}
}
// 先序遍历(根-左-右)
void preOrder(TreeNode node) {
if (node != null) {
System.out.print(node.val + " ");
preOrder(node.left);
preOrder(node.right);
}
}
// 中序遍历(左-根-右)
void inOrder(TreeNode node) {
if (node != null) {
inOrder(node.left);
System.out.print(node.val + " ");
inOrder(node.right);
}
}
// 后序遍历(左-右-根)
void postOrder(TreeNode node) {
if (node != null) {
postOrder(node.left);
postOrder(node.right);
System.out.print(node.val + " ");
}
}
```
对于树和二叉树的相互转换,可以分别使用二叉树转链表和链表转二叉树的方法。例如,二叉搜索树可以用前驱/后继指针的方式将其转化为一个有序单链表。
至于哈夫曼编码和译码,首先需要计算字符频率,然后构造哈夫曼树。编码过程中,每个字符对应树上的路径,最短路径表示的数字就是其编码。这里仅提供基本思路,实际实现可能涉及队列等数据结构:
```java
public class HuffmanCoding {
// 哈夫曼编码算法核心部分省略
public static Map<Character, String> getHuffmanCode(String text) {
// 计算字符频率,构建哈夫曼树,生成编码映射
}
// 编码文本
public static String encode(String text, Map<Character, String> huffmanMap) {
StringBuilder encodedText = new StringBuilder();
for (char c : text.toCharArray()) {
encodedText.append(huffmanMap.get(c));
}
return encodedText.toString();
}
// 译码
public static String decode(String encodedText, Map<String, Character> inverseMap) {
StringBuilder decodedText = new StringBuilder();
int index = 0;
while (index < encodedText.length()) {
String currentCode = encodedText.substring(index);
char decodedChar = inverseMap.get(currentCode);
decodedText.append(decodedChar);
index += currentCode.length();
}
return decodedText.toString();
}
}
```
阅读全文