java写普通树的代码
时间: 2024-03-16 21:47:54 浏览: 7
下面是一个简单的Java普通树的实现代码:
```java
public class Tree {
private TreeNode root;
private class TreeNode {
private int data;
private List<TreeNode> children;
public TreeNode(int data) {
this.data = data;
children = new ArrayList<>();
}
public void addChild(TreeNode node) {
children.add(node);
}
}
public Tree() {
root = null;
}
public void insert(int data) {
TreeNode newNode = new TreeNode(data);
if (root == null) {
root = newNode;
} else {
TreeNode current = root;
while (current != null) {
if (data < current.data) {
if (current.children.size() > 0) {
current = current.children.get(0);
} else {
current.addChild(newNode);
break;
}
} else {
if (current.children.size() > 1) {
current = current.children.get(1);
} else {
current.addChild(newNode);
break;
}
}
}
}
}
public boolean search(int data) {
return search(root, data);
}
private boolean search(TreeNode node, int data) {
if (node == null) {
return false;
} else if (node.data == data) {
return true;
} else {
boolean found = false;
for (TreeNode child : node.children) {
found = search(child, data);
if (found) {
break;
}
}
return found;
}
}
public void delete(int data) {
root = delete(root, data);
}
private TreeNode delete(TreeNode node, int data) {
if (node == null) {
return null;
} else {
if (data == node.data) {
if (node.children.size() == 0) {
node = null;
} else if (node.children.size() == 1) {
node = node.children.get(0);
} else {
TreeNode minNode = node.children.get(1);
while (minNode.children.size() > 0) {
minNode = minNode.children.get(0);
}
node.data = minNode.data;
node.children.remove(minNode);
}
} else {
for (TreeNode child : node.children) {
child = delete(child, data);
}
}
return node;
}
}
public void print() {
print(root);
}
private void print(TreeNode node) {
if (node == null) {
return;
}
System.out.print(node.data + " ");
for (TreeNode child : node.children) {
print(child);
}
}
}
```
这个实现中包含了普通树的基本操作,包括插入、查找、删除和打印。其中,insert方法使用迭代实现节点的插入,search方法使用递归实现节点的查找,delete方法使用递归实现节点的删除,print方法使用递归实现先序遍历。在普通树中,每个节点可以有多个子节点,因此TreeNode中包含了一个List<TreeNode>类型的children属性,用于存储子节点。