java中存储树结构
树是数据结构中的一种,是有限个节点组成的集合。那么在java中如何存储这种结构呢?
这里以二叉树为例,首先想到的方法就是定义节点类,代码如下:
//节点类
public class Node<T> {
//节点值
private T t;
//左节点
private Node<T> leftNode;
//右节点
private Node<T> rightNode;
public Node() {
}
public Node(T t) {
this.t = t;
}
public T getT() {
return t;
}
public void setT(T t) {
this.t = t;
}
public Node<T> getLeftNode() {
return leftNode;
}
public void setLeftNode(Node<T> leftNode) {
this.leftNode = leftNode;
}
public Node<T> getRightNode() {
return rightNode;
}
public void setRightNode(Node<T> rightNode) {
this.rightNode = rightNode;
}
}
//测试
public class Test {
public static void main(String[] args) {
//父节点
Node<Integer> f = new Node<>(1);
//左节点
Node<Integer> left = new Node<>(2);
f.setLeftNode(left);
}
}
这样就可以构建一个树了。
但是在使用时觉得这样特地定义一个类太麻烦了,那我们就换一种方式,使用一维数组。代码如下:
public class Test {
public static void main(String[] args) {
String[] tree = new String[20];
//根节点
tree[0] = "1";
//左节点
tree[1] = "2";
//右节点
tree[2] = "3";
//注意:在这里的规律是父节点的下标为i,那么其左子节点下标为2*i+1,其右子节点下标为2*i+2;
//这样就可以一直类推下去了,如果变为三叉树呢,四叉树呢?
}
}
相比较于定义类这样好像方便了不少,但其实这样也有不足,就是当树中的节点并不是那么完完全全的时候,定义数组会空不少,这样就会浪费存储,越稀疏,浪费存储越严重。