import java.util.ArrayList;
import java.util.List;
public class TreeChild<E> {
// 内部子节点类
private static class SonNode {
// 当前节点位置
private int pos;
// 下一节点
private SonNode next;
public SonNode(int pos, SonNode next) {
this.pos = pos;
this.next = next;
}
}
// 内部节点类
public static class Node<T> {
// 节点数据
T data;
// 第一个子节点
SonNode first;
public Node(T data) {
this.data = data;
this.first = null;
}
}
// 默认树的节点数
private final int DEFAULT_SIZE = 100;
// 树的节点数
private int treeSize = 0;
// 存储树节点的节点数组
private Node<E>[] nodes;
// 记录的节点数
private int nodeNum = 0;
// 指定根节点创建树
public TreeChild(E element) {
treeSize = DEFAULT_SIZE;
nodes = new Node[treeSize];
nodes[0] = new Node<E>(element);
nodeNum++;
}
// 指定跟节点以及节点个数
public TreeChild(E element, int size) {
this.treeSize = size;
nodes = new Node[treeSize];
nodes[0] = new Node<E>(element);
nodeNum++;
}
// 判定树是否为空
public boolean empty() {
return nodes[0] == null;
}
// 或去树的根节点
public Node<E> root() {
return nodes[0];
}
// 获取指定节点的存储位
public int contain(Node element) {
for (int i = 0; i < treeSize; i++) {
if (element == nodes[i]) {
return i;
}
}
return -1;
}
// 向指定节点添加子节点
public void insert(E element, Node pareNode) {
for (int i = 0; i < treeSize; i++) {
if (nodes[i] == null) {
nodes[i] = new Node<E>(element);
if (pareNode.first == null) {
pareNode.first = new SonNode(i, null);
} else {
SonNode next = pareNode.first;
while (next.next != null) {
next = next.next;
}
next.next = new SonNode(i, null);
}
nodeNum++;
return;
}
}
throw new RuntimeException("树已满");
}
// 获取指定节点的子节点
public List<Node<E>> children(Node parent) {
List<Node<E>> list = new ArrayList<>();
SonNode next = parent.first;
while (next.next != null) {
list.add(nodes[next.pos]);
next = next.next;
}
return list;
}
// 返回指定节点的第index个节点
public Node getIndexNode(Node parent, int index) {
SonNode next = parent.first;
for (int i = 0; i < index; i++) {
if (index == i) {
return nodes[next.pos];
}
next = next.next;
}
return null;
}
// 获取树的深度
public int deep() {
return deep(nodes[0]);
}
// 获取指定节点子节点深度
public int deep(Node node) {
if (node.first == null) {
return 0;
} else {
int max = 0;
SonNode next = node.first;
while (next.next != null) {
int temp = deep(nodes[next.pos]);
if (temp > max) {
max = temp;
}
next = next.next;
}
return max + 1;
}
}
}
数据结构:树的子节点表示法--Java实现
最新推荐文章于 2022-06-23 10:49:59 发布