import java.util.ArrayList;
import java.util.List;
public class TreeParents<E> {
// 定义内部节点类
public static class Node<T> {
T data;
int parents;
public Node() {
}
public Node(T element) {
this.data = element;
}
public Node(T elemenT, int parent) {
this.data = elemenT;
this.parents = parent;
}
public String toString() {
return "[data = " + data + " ," + " parents " + parents + "]";
}
}
// 默认树内的节点数
private final int DEFAULT_SIZE = 100;
// 实际节点数
private int treesize = 0;
// 内部节点数组
private Node<E>[] nodes;
// 记录节点数
private int nodeNum = 0;
// 指定元素创建树
public TreeParents(E element) {
nodes = new Node[DEFAULT_SIZE];
treesize = DEFAULT_SIZE;
nodes[nodeNum] = new Node(element, -1);
nodeNum++;
}
// 指定树的长度以及根元素
public TreeParents(E element, int size) {
nodes = new Node[size];
treesize = size;
nodes[nodeNum] = new Node(element, -1);
nodeNum++;
}
// 判定树是否为空
public boolean empty() {
return nodes[0] == null;
}
// 获取树的根节点
public Node<E> getRoot() {
return nodes[0];
}
// 获取子节点的父节点
public Node<E> parent(Node element) {
return nodes[element.parents];
}
// 获取指定节点的位置
public int contain(Node element) {
for (int i = 0; i < treesize; i++) {
if (nodes[i] == element)
return i;
}
return -1;
}
// 向指定节点添加子节点
public void AddNode(E element, Node parent) {
for (int i = 0; i < treesize; i++) {
if (nodes[i] == null) {
nodes[i] = new Node(element, contain(parent));
nodeNum++;
return;
}
}
throw new RuntimeException("树已满");
}
// 返回指定节点的子节点
public List<Node<E>> children(Node parent) {
List<Node<E>> list = new ArrayList<Node<E>>();
for (int i = 0; i < treesize; i++) {
if (nodes[i].parents == contain(parent) && nodes[i] != null) {
list.add(nodes[i]);
}
}
return list;
}
// 返回树的深度
public int deep() {
int max = 0;
for (int i = 0; i < treesize && nodes[i] != null; i++) {
int deep = 1;
int parents = nodes[i].parents;
while (parents != -1 && nodes[parents] != null) {
parents = nodes[parents].parents;
deep++;
}
if (deep > max) {
max = deep;
}
}
return max;
}
}
数据结构:树的父节点表示法--Java实现
最新推荐文章于 2022-07-13 10:57:27 发布