本文最后更新于 763 天前,其中的信息可能已经有所发展或是发生改变。
一:前言
最近学习数据结构了解了树的孩子表示法(C语言)后,网上搜索了一下Java的写法却找不到,于是我打算自己用Java写一遍树的孩子表示法,方法较简单,可以作为参考~~~
二:树的孩子表示法
首先孩子表示法的树是这样的:
于是乎他的Java代码就产生啦~~~~~~~~~~~~:
结点代码:
public class Node<T> {
//数据域
int data;
//指针域
Node next;
int parent;
public Node(int data,int index){
this.data = data;
this.parent = index;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
public Node getNext() {
return next;
}
public void setNext(Node<T> next) {
this.next = next;
}
public int getParent() {
return parent;
}
public void setParent(int parent) {
this.parent = parent;
}
}
孩子表示法:
public class ChildTree_two {
//结点数组
Node<Iterable>[] nodes;
//当前元素数量
int size;
//最大元素数量--由用户定义
int max_Size;
//初始化
public ChildTree_two(int max_Size){
this.nodes = new Node[max_Size];
this.size = 0;
this.max_Size = max_Size;
}
/**
*
* @param data 传入的数据
* @param index 该数据的父节点的数据
*/
//插入操作
public void insert(int data,int index){
Node<Iterable> node = new Node<Iterable>(data,index);
if (index == -1){
nodes[size] = node;
size++;
}else {
int father = findfather(index);
if (father == -1){
System.out.println("该父节点没有找到");
}else{
nodes[size] = node;
//两个结点拥有相同的数据,当然这是一个较笨的方法
Node<Iterable> node_link = new Node<Iterable>(data,index);
node_link.setNext(nodes[father].getNext());
nodes[father].setNext(node_link);
size++;
}
}
}
/**
*
* @param index 下标
* @return 返回父节点的下标
*/
public int findfather(int index){
for (int i = 0; i<size;i++){
if (nodes[i].data == index){
return i;
}
}
return -1;
}
public void show(){
for (int i = 0; i<size;i++){
System.out.print("该节点的数据为"+nodes[i].getData() + " 双亲结点为" + nodes[i].getParent());
while (nodes[i].getNext() != null){
System.out.print(" 该结点的子节点为:" + nodes[i].getNext().getData());
nodes[i] = nodes[i].getNext();
}
System.out.println();
}
}
测试代码:
public class ChildTreeDemo {
public static void main(String[] args) {
ChildTree_two demo = new ChildTree_two(10);
demo.insert(1,-1);
demo.insert(2,1);
demo.insert(3,1);
demo.insert(4,1);
demo.insert(7,4);
demo.show();
}
}
最后放图:
好棒!又有动力了!!!