每个姓氏有对应的编码用java算法二叉树中根遍历后查找和删除的代码
时间: 2024-03-17 08:45:01 浏览: 17
以下是用Java实现姓氏编码的二叉树,包括查找和删除操作的代码:
```
public class SurnameCodeBinaryTree {
private Node root;
// 节点类,包含姓氏和对应编码
private class Node {
String surname;
String code;
Node left;
Node right;
public Node(String surname, String code) {
this.surname = surname;
this.code = code;
this.left = null;
this.right = null;
}
}
// 插入节点
public void insert(String surname, String code) {
root = insertNode(root, surname, code);
}
private Node insertNode(Node node, String surname, String code) {
if (node == null) {
return new Node(surname, code);
} else if (surname.compareTo(node.surname) < 0) {
node.left = insertNode(node.left, surname, code);
} else if (surname.compareTo(node.surname) > 0) {
node.right = insertNode(node.right, surname, code);
} else {
node.code = code;
}
return node;
}
// 查找节点
public String getCode(String surname) {
Node node = findNode(root, surname);
if (node != null) {
return node.code;
}
return null;
}
private Node findNode(Node node, String surname) {
if (node == null) {
return null;
} else if (surname.compareTo(node.surname) < 0) {
return findNode(node.left, surname);
} else if (surname.compareTo(node.surname) > 0) {
return findNode(node.right, surname);
} else {
return node;
}
}
// 删除节点
public void delete(String surname) {
root = deleteNode(root, surname);
}
private Node deleteNode(Node node, String surname) {
if (node == null) {
return null;
} else if (surname.compareTo(node.surname) < 0) {
node.left = deleteNode(node.left, surname);
} else if (surname.compareTo(node.surname) > 0) {
node.right = deleteNode(node.right, surname);
} else {
if (node.left == null && node.right == null) {
return null;
} else if (node.left == null) {
return node.right;
} else if (node.right == null) {
return node.left;
} else {
Node temp = findMinNode(node.right);
node.surname = temp.surname;
node.code = temp.code;
node.right = deleteNode(node.right, temp.surname);
}
}
return node;
}
private Node findMinNode(Node node) {
while (node.left != null) {
node = node.left;
}
return node;
}
// 中序遍历
public void inorderTraversal() {
inorder(root);
}
private void inorder(Node node) {
if (node != null) {
inorder(node.left);
System.out.println(node.surname + " " + node.code);
inorder(node.right);
}
}
}
```
使用方法如下:
```
SurnameCodeBinaryTree tree = new SurnameCodeBinaryTree();
tree.insert("Li", "001");
tree.insert("Zhang", "002");
tree.insert("Wang", "003");
tree.inorderTraversal(); // 中序遍历输出节点信息
System.out.println(tree.getCode("Zhang")); // 查找姓氏为"Zhang"的编码
tree.delete("Zhang"); // 删除姓氏为"Zhang"的节点
```