自定义一个简单的散列表
主要功能
通过java代码实现一个简单的树结构,可以进行增查.
代码实现
package com.example.springboot01.util;
import org.junit.Test;
/**
* 树结构实现
* 因为树的子节点数量不确定,所以采用将每个节点的所有儿子都放在树节点的链表中.
*
*/
public class MyTreeNode<T> {
private T element = null;
// 最左边的第一个子节点
private MyTreeNode<T> firstChild = null;
// 子节点右边的兄弟节点
private MyTreeNode<T> nextSibling = null;
public T getElement() {
return element;
}
public void setElement(T element) {
this.element = element;
}
public MyTreeNode<T> getFirstChild() {
return firstChild;
}
public void setFirstChild(MyTreeNode<T> firstChild) {
this.firstChild = firstChild;
}
public MyTreeNode<T> getNextSibling() {
return nextSibling;
}
public void setNextSibling(MyTreeNode<T> nextSibling) {
this.nextSibling = nextSibling;
}
public void print() {
traversal(1);
}
/**
* 遍历
* 从上往下,从左往右依次遍历
*/
public void traversal(int i) {
Util.println(element);
if (firstChild != null) {
for (int j = 0; j < i-1; j++) {
Util.print(" ");
}
Util.print("|-");
firstChild.traversal(i + 1);
}
if (nextSibling != null) {
for (int j = 0; j < (i - 2); j++) {
Util.print(" ");
}
Util.print("|-");
nextSibling.traversal(i);
}
}
@Test
public void testMyTreeNode() {
// 最左边的子节点
MyTreeNode<String> leftChild = new MyTreeNode<>();
leftChild.setElement("1");
// 父节点
MyTreeNode<String> foot = new MyTreeNode<>();
foot.setElement("0");
foot.setFirstChild(leftChild);
MyTreeNode<String> temp = leftChild;
for(int i=2; i<10; i++) {
// 右边的兄弟子节点
MyTreeNode<String> item = new MyTreeNode<>();
item.setElement(i + "");
temp.setNextSibling(item);
temp = item;
}
foot.print();
}
}
树的实现
代码优化
// 暂无
总结
- 树结构可以用于目录管理,
- 由于树的子节点数量不确定,所以使用第一儿子/下一兄弟表示法能很好的解决树的代码实现.