package com.whyc.dto.multiTree;
|
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
|
/**
|
* 多叉树之三层
|
*/
|
public class MultiTree {
|
|
TreeNode root = null;
|
|
public MultiTree(TreeNode root) {
|
this.root = root;
|
}
|
|
public MultiTree() {
|
}
|
|
TreeNode getIndex(TreeNode node,int index){
|
if(node==null){
|
return null;
|
}else{
|
List<TreeNode> node1 = node.getNode();
|
for (int i = 0; i < node1.size(); i++) {
|
if(node1.get(i).getIndex()==index){
|
return node1.get(i);
|
}else{
|
getIndex(node1.get(i),index);
|
}
|
}
|
}
|
return null;
|
}
|
|
class TreeNode {
|
private int index;
|
private String data;
|
private List<TreeNode> node;
|
|
public TreeNode(int index, String data) {
|
this.index = index;
|
this.data = data;
|
}
|
|
public int getIndex() {
|
return index;
|
}
|
|
public void setIndex(int index) {
|
this.index = index;
|
}
|
|
public String getData() {
|
return data;
|
}
|
|
public void setData(String data) {
|
this.data = data;
|
}
|
|
public List<TreeNode> getNode() {
|
return node;
|
}
|
|
public void setNode(List<TreeNode> node) {
|
this.node = node;
|
}
|
}
|
|
public TreeNode getRoot() {
|
return root;
|
}
|
|
public void setRoot(TreeNode root) {
|
this.root = root;
|
}
|
|
public static void main(String[] args) {
|
String dates = "2020-01-02,2020-01-03,2020-02-03,2021-06-06,2021-05-06";
|
String[] dateArr = dates.split(",");
|
|
MultiTree tree = new MultiTree().saveAsTree(dateArr);
|
System.out.println(tree);
|
|
}
|
|
/**
|
* 处理3层数据结构
|
* @param dateArr
|
* @return
|
*/
|
public MultiTree saveAsTree(String[] dateArr) {
|
root = new TreeNode(0,"0");
|
|
int index = 0;
|
for (int i = 0; i < dateArr.length; i++) {
|
//dataArr[i]="2020-01-02"
|
String[] date = dateArr[i].split("-");
|
String year = date[0];
|
String month = date[1];
|
String day = date[2];
|
//查看第一层year层是否存在,不存在则添加节点到year节点list中
|
TreeNode currTreeNode = null;
|
if(root.getNode()==null){
|
ArrayList<TreeNode> level1Nodes = new ArrayList<>();
|
level1Nodes.add(new TreeNode(++index, year));
|
root.setNode(level1Nodes);
|
//直接存储第二层month
|
ArrayList<TreeNode> level2Nodes = new ArrayList<>();
|
level2Nodes.add(new TreeNode(++index, month));
|
level1Nodes.get(0).setNode(level2Nodes);
|
//直接存储第三层day
|
ArrayList<TreeNode> level3Nodes = new ArrayList<>();
|
level3Nodes.add(new TreeNode(++index, day));
|
level2Nodes.get(0).setNode(level3Nodes);
|
}else{
|
List<TreeNode> level1Nodes = root.getNode();
|
boolean lv1Exist = false;
|
//int lv1ExistIndex = 0;
|
for (int j = 0; j < level1Nodes.size(); j++) {
|
//第一层year层
|
if(level1Nodes.get(j).getData().equals(year)){
|
lv1Exist = true;
|
//lv1ExistIndex = level1Nodes.get(j).getIndex();
|
currTreeNode = level1Nodes.get(j);
|
break;
|
}
|
}
|
//第一层year层存在
|
if(lv1Exist){
|
//判断第二层month是否存在
|
TreeNode level1TreeNode = currTreeNode;
|
List<TreeNode> level2Nodes = level1TreeNode.getNode();
|
boolean lv2Exist = false;
|
//int lv2ExistIndex = 0;
|
for (int j = 0; j < level2Nodes.size(); j++) {
|
//第二层month层
|
if(level2Nodes.get(j).getData().equals(month)){
|
lv2Exist = true;
|
//lv2ExistIndex = level2Nodes.get(j).getIndex();
|
currTreeNode = level2Nodes.get(j);
|
break;
|
}
|
}
|
//第二层month层存在
|
if(lv2Exist){
|
//判断第三层day层直接添加
|
//TreeNode level3TreeNode = level2Nodes.get(lv2ExistIndex);
|
TreeNode level2TreeNode = currTreeNode;
|
List<TreeNode> level3Nodes = level2TreeNode.getNode();
|
level3Nodes.add(new TreeNode(++index,day));
|
level2TreeNode.setNode(level3Nodes);
|
|
}else{
|
//month层不存在
|
level2Nodes.add(new TreeNode(++index,month));
|
//直接存储第二层month层
|
//直接存储第三层day
|
level2Nodes.get(level2Nodes.size()-1).setNode(Arrays.asList(new TreeNode(++index,day)));
|
}
|
|
|
}else{
|
//year层不存在
|
level1Nodes.add(new TreeNode(++index,year));
|
//直接存储第二层month层
|
ArrayList<TreeNode> level2Nodes = new ArrayList<>();
|
level2Nodes.add(new TreeNode(++index, month));
|
level1Nodes.get(level1Nodes.size()-1).setNode(level2Nodes);
|
//直接存储第三层day
|
ArrayList<TreeNode> level3Nodes = new ArrayList<>();
|
level3Nodes.add(new TreeNode(++index,day));
|
level2Nodes.get(0).setNode(level3Nodes);
|
}
|
}
|
|
}
|
|
return this;
|
}
|
|
}
|